2012-03-30 19 views
77

我总是读,我应该使用Django模型管理器objects.create文档在哪里?

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。

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

+11

为什么这个问题得到了否决票?我刚到这里时遇到了同样的问题,发现这很有用。 – Ferguzz 2012-04-05 21:17:00

+4

我也不知道,也许人们认为它很愚蠢和明显。不要太在乎它:我得到我的回答我很高兴。我也搜查没有结果,所以我问。 – 2012-04-06 04:13:19

回答

1

基本上这两种方法是equivalentModel.objects.create的使用可能是首选,因为它更适合Django的风格。等效

40
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

创建本质上是一样的。下面是创建的源代码。

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 

它创建一个实例并保存它。