>>> carls = [c.source.out_crushes.all().select_related().values_list('target') for c in similar_crushes]
>>> [carlid for carlid in c for c in carls]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'Crush' object is not iterable
>>> for c in carls:
... pass
...
>>> [carlid for carlid in c for c in carls]
[(1,), (1,), (3,), (3,)]
抱歉,您的问题标题很糟糕,但我不知道该如何措辞更好,因为我完全迷失了.
这里发生了什么?为什么在初始列表理解中它不是可迭代的,但是当我分别迭代其中的一部分时,它变得可迭代了?
解决方法:
卡尔看起来应该是列表的列表,例如[[((1,),(2,),(3,)],[(1,),(2,)]]
当您[在car中将c替换为car中的c替换为carlid]时,您将尝试遍历c的最后定义值,该值本来是来自same_crushes的Crush对象.
在carl中对c进行操作时:将c重新定义为carls列表中的最后一个元素,卡尔斯列表是PKs元组的列表,可迭代.
for i in range(100):
pass
print i
# out : 99
标签:python,django,django-models