Author.objects.create(name="Joe")
或
an_author = Author(name="Joe")
an_author.save()
这两者有什么区别? 哪一个更好?
类似的问题:
- difference between objects.create() and object.save() in django orm
- Django: Difference between save() and create() from transaction perspective
答案 0 :(得分:5)
create()
就像是save()
方法的包装器。
创建(** kwargs)强>
创建对象并将其保存在一个对象中的便捷方法 步骤
create()
函数的Django 1.8 source code:
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) # calls the `save()` method here
return obj
对于create()
,,在内部调用force_insert
时会传递save()
参数,这会强制save()
方法执行SQL INSERT
,但未执行UPDATE
。它会强行在数据库中插入一个新行。
save()
,UPDATE
或INSERT
将会执行,具体取决于对象的主键属性值。
答案 1 :(得分:3)
Create只是用于使用kwargs创建新对象的便捷代理。如下所示,它会为您调用save()
:
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
要注意的一件事是要保存的force_insert参数。这意味着Django将始终在此使用INSERT sql语句而不是UPDATE。默认值为false,因此在第二个示例中,save()将INSERT或UPDATE。
答案 2 :(得分:2)
您使用Manager
方法create
的第一个方法。它已经为您实现,它将自动保存。
第二种方法是创建类Author
的实例,然后调用save。
总之,
Author.objects.create(name="Joe")
创建 - >保存()
另一条第一行创建,第二条线保存。
在某些情况下,您需要始终调用manager方法。例如,您需要哈希密码。
# In here you are saving the un hashed password.
user = User(username="John")
user.password = "112233"
user.save()
# In here you are using the manager method,
# which provide for you hashing before saving the password.
user = User.objects.create_user(username="John", password="112233")
所以基本上,在你的模型中将其视为制定者。如果要在创建时始终修改数据,请使用管理器。