无法追加Model.objects.all()

时间:2010-04-01 12:13:06

标签: python django django-models django-queryset

我无法运行['abc'].append( MyModel.objects.all() ),因为如果MyModel没有条目,它会生成异常'NoneType' object is not iterable

任何变通方法或类似c ++中的? :

修改 我的陈述实际上是

','.join([ str(e) for e in ['abc','def'].append( MyModel.objects.all() ) ])

似乎问题是由append()返回NoneType引起的。我通过创建一个变量来保存列表然后extend()

来解决这个问题

5 个答案:

答案 0 :(得分:2)

怎么样:

['abc'].append( MyModel.objects.all() or [])

答案 1 :(得分:2)

最好是明确而不是隐含(并避免使用可能导致错误的or的短路特性:

my_objects = MyModel.objects.all()
if my_objects:
    [a,b,c].extend(my_objects)

答案 2 :(得分:1)

Model.objects.all() is a QuerySet这是可迭代的(请参阅the source)。将迭代器传递给list.extend的工作正常:迭代器的内容很好地展开到列表的末尾。

注意:将其传递给list.append会将迭代器对象本身放入列表中,因此您很可能想要extend()

答案 3 :(得分:1)

从append方法返回None,这是在适当的位置发生的。换句话说,您的陈述等同于

[str(e) for e in None]

自然引发NoneType异常。解决方案是对append或extend方法有一个单独的声明,然后按照blokeley的建议来明确。

答案 4 :(得分:0)

不应该是+ =而不是追加?

相关问题