在Django中,比如有一个用户模型 User。我想创建一个用户,在书上发现两种方式:
方法一:
user = User.objects.create(email='a@b.com')
方法二:
user = User(email='a@b.com')
user.username = 'somename'
user.save()
请问这两种方式有什么区别?
在Django中,比如有一个用户模型 User。我想创建一个用户,在书上发现两种方式:
方法一:
user = User.objects.create(email='a@b.com')
方法二:
user = User(email='a@b.com')
user.username = 'somename'
user.save()
请问这两种方式有什么区别?
两者没有本质区别.
create的实现:
class QuerySet(object):
... ...
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
... ...
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
其实区别从你提问的代码里就能看出来,Django 文档官方的解释表明 objects.create 是为了
用一句话方便的创建并保存一个对象。
objects.create 直接创建并保存了对象,这样 user 代表的就是一个已经保存在数据库中的实例,而方法二的 user 则是一个没有保存在数据库中的实例,如果涉及到 user 是某个对象的外键则需要把它真正存进数据库后才能设置为相应的外键,如果用方法一的方式创建则不用担心这个问题,直接设置就可以了。
二者最后达到的目的是一样的,区别就在于如果在创建对象时所需的数据都知道那么可以直接用 create,反之则需要 save。 当然一直用 save 也没有任何问题。