Python django如何插入到相互引用的表中
我使用的是django 1.6,有两个模型相互引用,如下所示:Python django如何插入到相互引用的表中,python,django,foreign-keys,foreign-key-relationship,cyclic-reference,Python,Django,Foreign Keys,Foreign Key Relationship,Cyclic Reference,我使用的是django 1.6,有两个模型相互引用,如下所示: class Person(models.Model): address = models.ForeignKey('Address', blank=False) class Address(models.Model): person = models.ForeignKey(Person, blank=False) 我使用循环外键的原因是为了数据完整性。因为一个地址可能只分配给一个用户,并且一个用户必须至少有一个地址。是
class Person(models.Model):
address = models.ForeignKey('Address', blank=False)
class Address(models.Model):
person = models.ForeignKey(Person, blank=False)
我使用循环外键的原因是为了数据完整性。因为一个地址可能只分配给一个用户,并且一个用户必须至少有一个地址。是的,我知道没有这个我可以活下去,但我宁愿不要
我正在使用带有外键的PostgreSQLDEFERRABLE INITIALLY DEFERRED
,我希望使用事务将数据插入这些表中。
但是,当我尝试使用transaction.atomic():
时,它在视图中的行为与预期不符
以下是我正在做的:
with transaction.atomic():
addr = Address(street='125 fake street')
addr.save()
person = Person()
person.address_id = addr.id
addr.person_id = person.id
addr.save()
person.save()
但是,我第一次调用addr.save()
有什么建议我做错了什么吗?有更好的方法吗?这里的问题是,因为PostgreSQL不会等到事务结束时才检查NOTNULL “插入或修改行时(不是在语句末尾),总是立即检查NOT NULL和CHECK约束。” 我的列被设置为非空 作为解决办法,我正在这样做
with transaction.atomic():
addr = Address()
addr.person_id = 0 # setting this temporarily to Zero
addr.save()
person = Person()
person.address_id = addr.id
person.save()
addr.person_id = person.id
addr.save()
这允许我插入数据库,并在以后更新外键,如果没有外键匹配,仍然会失败,因为id值永远不会为零 如果要返回此人,如何在模板文件中获取此人的地址?