Django:我可以通过单个方法调用向数据库添加新模型实例列表吗?

时间:2011-09-20 10:48:37

标签: django django-models django-queryset

如果我基于某些表单输入创建新模型对象的列表,例如

new_items = []
for name, value in self.cleaned_data.items():
  if name.startswith('content_item_'):
      new_items.append(ContentItem(item=value))

# can I add the entire new_items list to the database in one swoop? 

我无法在文档中查找是否存在这种情况,这通常是指通过.save()方法一次创建一个对象。但是当你有一整套要添加的对象时,一次一个似乎效率低下。

谢谢!

2 个答案:

答案 0 :(得分:1)

我相信Brandon Konkle对类似问题的回复仍然有效:Question about batch save objects in Django

总结:遗憾的是,不,你必须使用带有手动查询的django.db.cursor来执行此操作。如果数据集很小,或者性能不那么重要,那么循环并不是那么糟糕,而且是最简单的解决方案。

另请参阅此票证:https://code.djangoproject.com/ticket/661

答案 1 :(得分:1)

https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create

编辑:不幸的是,这不是1.3

原始答案

感谢上帝bulk_create

然后你可以这样做:

ContentItem.objects.bulk_create(new_items)

对于那些懒得点击链接的人,以下是文档中的示例:

>>> Entry.objects.bulk_create([
...     Entry(headline="Django 1.0 Released"),
...     Entry(headline="Django 1.1 Announced"),
...     Entry(headline="Breaking: Django is awesome")
... ])