创建两个模型实例并使用OneToOneField连接它们时,连接会在对象创建时自动创建和保存:
from django.db import models
class MyModel(models.Model):
name = models.CharField(primary_key=True, max_length=255)
next = models.OneToOneField('self', on_delete=models.SET_NULL, related_name='prev', null=True, blank=True)
>>> m2 = MyModel.objects.create(name="2")
>>> m1 = MyModel.objects.create(name="1", next=m2)
>>> m2.prev
<MyModel: 1>
>>> m2.refresh_from_db()
>>> m2.prev
<MyModel: 2>
然而,当使用反向字段创建相同的连接时,创建也会自动完成,但不会保存。
>>> m1 = MyModel.objects.create(name="1")
>>> m2 = MyModel.objects.create(name="2", prev=m1)
>>> m1.next
<MyModel: 2>
>>> m1.refresh_from_db()
>>> m1.next
注意,最后一个语句不会打印任何东西,因为它返回了None
如何在使用反向字段创建时始终保存关系,而不必每次手动使用.save()
?
prev
isn't in the database whenrefresh_from_db
is called and is therefore replaced with what is in the database, i.e.None
- Oskar Persson