我总是读到我应该使用
model = Model(a=5, b=6)
model.save()
但我刚看到有一个管理器功能创建,因为我看到了一个使用它的opensource django应用程序。
model = Model.objects.create(a=5, b=6)
print model.pk
1
所以建议使用它吗?或者仍然优选使用.save方法。我猜测objects.create无论如何都会尝试创建它,而如果指定了pk,save可以保存现有对象。
这些是我找到的文档:https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects
答案 0 :(得分:41)
p = Person.objects.create(first_name="Bruce", last_name="Springsteen")
相当于:
p = Person(first_name="Bruce", last_name="Springsteen")
p.save(force_insert=True)
force_insert表示将始终创建新对象 通常你不需要担心这个。但是,如果你的模型 包含您设置的手动主键值以及该值 已存在于数据库中,对create()的调用将失败 IntegrityError因为主键必须是唯一的。做好准备 如果您使用手动主键,则处理异常。
答案 1 :(得分:34)
它在页面"QuerySet API reference"中,从文档索引链接。
答案 2 :(得分:2)
创造基本上是一样的。下面是create的源代码。
def create(self, **kwargs):
"""
Creates a new object with the given kwargs, saving it to the database
and returning the created object.
"""
obj = self.model(**kwargs)
self._for_write = True
obj.save(force_insert=True, using=self.db)
return obj
它创建一个实例,然后保存它。
答案 3 :(得分:1)
基本上,这两种方法是equivalent。 Model.objects.create
的使用可能是首选,因为它更适合Django的风格。