刚到Django ORM,有一个小问题。
如果我有一个像这样的模型:
class Person(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.CharField(max_length=255)
字符串
我可以通过以下方式添加新的人员:
p1 = Person.objects.create(name="Bob")
型
或者是
p2 = Person(name="Bob")
p2.save()
型
在第一种情况下(p1),我可以预期设置了“id”字段(在插入完成时自动递增)。第二种情况下我能期待同样的结果吗?django是否更新内存中的“Person”对象的属性(在本例中是id字段)?
后续问题:
1.假设我有另一个模型
class Business(models.Model):
id = models.BigAutoField(primary_key=True)
owner = models.ForeignKey(Person)
型
如果我这么做有什么区别吗
b = Business(owner=p1)
b.save()
型
vs
b = Business(owner=p2)
b.save()
型
1.如果在将person对象传递到Business之前不保存或创建person对象,会发生什么?例如,在
p = Person(name="Bob")
b = Business(owner=p)
b.save()?
型
1条答案
按热度按时间7d7tgy0s1#
第二种情况下我能期待同样的结果吗?
是,两者功能相同。第一个会更高效,因为它做了一个
force_create
,所以Django不会首先检查它是否可以在数据库中更新。事实上,如果我们查看**
.create(…)
**方法[Django-doc]的实现[GitHub],我们会看到:字符串
因此
.create(…)
将在内部调用.save(…)
。