【发布时间】:2017-05-26 17:04:53
【问题描述】:
在我们的应用程序中,我们有几个关系和几个模型,我试图实现一种通用的方法来获取一个对象的所有相关对象,甚至是反向对象。
如果我从我的模型Pessoa 打印._meta.get_fields(),我会得到这些关系字段(我省略了“正常”字段):
<ManyToManyRel: cadastroimoveis.pessoa>
<ManyToOneRel: cadastroimoveis.pessoa_pessoa>
<ManyToOneRel: cadastroimoveis.pessoa_pessoa>
<ManyToOneRel: cadastroimoveis.pessoa_itr>
<ManyToManyRel: cadastroimoveis.doc>
<ManyToOneRel: cadastroimoveis.doc_pessoa>
cadastroimoveis.Pessoa.relacoes
cadastroimoveis.Pessoa.itrs
此特定模型只有 M2M 关系,并且都包含指定 Here 的“直通”模型。
如您所见,它重复了它们,一个用于模型,一个用于“通过”中间表(我猜也是一个模型)。而在递归关系的情况下,它会重复两次。
我的问题是,有没有办法让这些不重复?
一种知道哪些重复字段最终“指向”相同关系的方法(即使它向两个表发送垃圾邮件)?因为如果直通表有字段,我想以不同的方式显示它们。
根据Model _meta API 文档,您可以使用它来获取所有相关对象:
[
f for f in MyModel._meta.get_fields()
if (f.one_to_many or f.one_to_one)
and f.auto_created and not f.concrete
]
但是“通过”表不被认为是自动创建的并且是具体的。
示例:
<ManyToManyRel: cadastroimoveis.ccir>
<ManyToOneRel: cadastroimoveis.ccir_pessoa>
这两个字段'指向'相同的关系,一个是中间表,另一个是模型,有没有(自动)方法可以知道这两个是相关的?我找不到他们共享的任何属性。
这是因为当直通表有字段时,我需要对其进行编辑,而不是模型本身的 M2M 字段
Models.py : http://pastebin.com/szDfhHQ3 我尽我所能地清理了
【问题讨论】:
-
你也可以在这里添加模型吗?
-
你使用的是哪个 Django 版本?
-
@AKS 抱歉耽搁了,添加了我的模型,将很快测试当前答案
标签: python django django-models python-3.5 django-1.10