抱歉没有描述性的标题,但我真的不知道如何措辞。
假设我有两个模型:
class Person(...):
name = ... #have an attribute
class Family(...):
mum = models.OneToOneField(Person)
dad = models.OneToOneField(Person)
当我有一个家庭包含
mum
和 dad
, 我想打电话 dad.family
会给我家人dad
是在。但是,我收到一条错误消息,说这与 mum
冲突。属性。这里的解决方案是使用 relative_name
s。但是从mum
给家人打电话除了来自 dad
之外的其他东西对我来说感觉很奇怪。为什么我不能直接打电话dad.family
?有人可以向我解释这里到底发生了什么冲突吗?谢谢!
最佳答案
问题是,给定您的模型,Person
可能是 mum
给一个家庭,还有一个 dad
到另一个家庭。
在这种情况下,这样的查询将是模棱两可的:
pat = Person.objects.get(name='Pat')
family1.mum = pat
family1.save()
family2.dad = pat
family2.save()
pat.family # Which family do we want?
出于这个原因,您需要为每个定义一个反向关系名称(例如,family_as_mum 和 family_as_dad)
关于具有多个相同的 Django OneToOneField --related_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712550/