Django模型管理器objects.create文档在哪里?


85

我总是读到我应该使用

model = Model(a=5, b=6)
model.save()

但是我只是看到有一个管理器函数创建,因为我看到了一个使用它的开源django应用程序。

model = Model.objects.create(a=5, b=6)
print model.pk
1

那么建议使用它吗?还是仍然首选使用.save方法。我猜想object.create不管如何都会尝试创建它,而如果指定了pk,则save可能会保存现有对象。

这些是我找到的文档:https : //docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
为什么这个问题被否决?我只是带着相同的问题来到这里,发现这很有用。
Ferguzz'4

4
我也不知道,也许人们认为这是愚蠢而明显的。不在乎它:P我很高兴得到我的回答。我也搜索没有结果,所以我问。
Sam Stoelinga'4

Answers:



44
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。如果使用手动主键,请做好处理异常的准备。


3

创建本质上是一样的。以下是用于创建的源代码。

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

它创建一个实例,然后保存它。


1

基本上,这两种方法是等效的Model.objects.create最好使用,因为它更适合Django的样式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.