具有多个相同的 Django OneToOneField --related_name

标签 django

抱歉没有描述性的标题,但我真的不知道如何措辞。

假设我有两个模型:

class Person(...):
  name = ... #have an attribute

class Family(...):
  mum = models.OneToOneField(Person)
  dad = models.OneToOneField(Person)

当我有一个家庭包含mumdad , 我想打电话 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/

相关文章:

python - Django 和 FeinCMS : A way to use the Media Library in other normal models?

jquery - Django JQuery Ajax 文件上传

python - 有没有用 Django 制作的 sql 管理面板? - Django

python - 在 Django/Python 中编写单元测试

python - Django测试客户端: login doesn't work

python - Django rest_auth.registration 即使在成功注册时也会发回错误

database - 同步时模型不会创建表

python - 处理 Django 上传文件中的 UTF-16

django - 非常慢的 Django : Multiple "SHOW default_transaction_isolation" calls in log

javascript - 动态传递值(例如 : innerHTML) to another element as a value