我使用iteritems()在字典上迭代以在Django中创建对象。但是,我发现创建的对象的数量与字典对象的数量不同。
在进一步探索这个问题时,我发现字典的iteritems()方法只返回197个元组,而字典本身则包含269个元素。
data = {...}
print len(data) #output: 269
for k, v in data.iteritems():
Category.objects.create(name=k).save()
len(Category.objects.all()) #output: 197
模型定义:
class Category(models.Model):
name = models.CharField(max_length=100)
答案 0 :(得分:2)
首先,我不建议您使用len(Category.objects.all())
来计算对象。相反,你应该使用
Category.objects.count()
这不是风格问题,而是效率问题。后者使用SQL COUNT,因此对象的数量不是由python计算的,而是由你的数据库(mysql,sqlite等)计算的。
我无法评论为什么你得到192个对象,而不是267.我的猜测是因为你的create
函数得到了一些不可用的参数 - 也许k
不是字符串,或者可能是长度超过100个字符。
您可以调查哪些元素未保存并提供此信息吗?