我无法运行['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()
它
答案 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)
不应该是+ =而不是追加?