递归多对多关系的相关名称不起作用

2024-01-07

多对多(非递归)

class A(models.Model):
    pass

class B(models.Model):
   parents = models.ManyToManyField(A, related_name='children')


>>> A._meta.get_all_field_names()
['children', u'id']

>>> B._meta.get_all_field_names()
[u'id', 'parents']

我可以获取模型实例的子集和父集a.children.all() and b.parents.all()

外键(递归)

class FK(models.Model):
    parent = models.ForeignKey('self', related_name='child')


>>> FK._meta.get_all_field_names()
['child', u'id', 'parent']

任何实例FK现在将能够得到它的父母和孩子fk.parent and fk.child

多对多(递归)

class M2M(models.Model):
    parents = models.ManyToManyField('self', related_name='children')

>>> M2M._meta.get_all_field_names()
[u'id', 'parents']

人们会期望,就像我可以访问a.children and fk.child,我也可以访问m2m.children。事实似乎并非如此。

我如何访问m2m.children?

我正在使用 Django 1.6.5。


备查

As 丹尼尔·罗斯曼的回答 https://stackoverflow.com/a/24536580/3694224说,设置symmetrical=False解决问题。在一个姜戈门票 https://code.djangoproject.com/ticket/12641解释为:

在父/子的情况下,关系不对称 - 如果 A 是 B 的子项,并不意味着 A 是 B 的父项。

With symmetrical=False, 中指定的逆关系related_name就像外键情况一样创建:

class M2M(models.Model):
    parents = models.ManyToManyField('self', related_name='children', symmetrical=False)

>>> M2M._meta.get_all_field_names()
[u'id', 'parents', children]


>>> parent.children.add(child)
>>> parent.children.all()  # returns QuerySet containing the child
>>> child.parents.all()    # returns QuerySet containing the parent

你需要设置symmetrical=False. As ManyToManyField 的文档 https://docs.djangoproject.com/en/stable/ref/models/fields/#django.db.models.ManyToManyField.symmetrical says:

当 Django 处理这个模型时,它识别出它本身有一个 ManyToManyField,因此,它不会向 Person 类添加 person_set 属性。相反,ManyToManyField 被假定为对称的——也就是说,如果我是你的朋友,那么你就是我的朋友。

如果您不希望与自身的多对多关系对称,请将对称设置为 False。这将强制 Django 添加反向关系的描述符,允许 ManyToManyField 关系是非对称的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归多对多关系的相关名称不起作用 的相关文章

随机推荐

  • 更改facet_wrap多重图中的绘图标题大小

    Can any help me change the title text size for these plots i e make them larger Script ggplot NMPSCMOR aes Length fill Y
  • Gradle 2.2.0 执行失败:SymbolForDebug

    将我的项目 以及附加的库 的 gradle 从 2 1 3 gt 2 2 0 升级后 它不再构建 并且显示 错误 任务 app transformNative libsWithStripDebugSymbolForDebug 执行失败 ja
  • 在matlab中通过非整数移位来移动向量的元素

    我想通过非整数移位来移位向量 线性插值似乎不是很准确 所以我尝试使用sinc通过以下使用傅立叶变换的代码进行插值 function y fshift x s FSHIFT Fractional circular shift Syntax g
  • 我可以在与其他页面(例如 wordpress)相同的 url 中创建 Flask Web 应用程序吗?

    我有一个自托管服务器 仅适用于我的局域网 带有 Wordpress miservidor com 和 Owncloud miservidor com owncloud 页面 这些页面工作完美 我最近决定在同一目录下使用 Flask 创建一个
  • 绑定到 ListView 的 SelectedItem 属性时设置初始选定项

    我有一个 Xamarin Forms xaml 页面 其中使用 ListView 允许用户从列表中选择单个项目 我已将 ListView 的 SelectedItem 属性绑定到 ViewModel 上的属性 效果很好 一旦用户更改所选项目
  • 桶排序的复杂度怎么会是O(n+k)呢?

    在说 这个问题以前有人问过 或者 找一本算法书 之前 请继续阅读并告诉我我的推理的哪一部分出了问题 假设你有 n 个整数 并将它们分成 k 个容器 这将花费 O n 时间 然而 需要对 k 个 bin 中的每一个进行排序 如果对每个 bin
  • XCUITest:以协调的方式跨两个应用程序运行测试

    我正在考虑使用 XCUITest 为我的 iOS 应用程序进行 UI 测试 看起来 XCUITest 具有广泛的功能 包括使用多个应用程序的能力 然而 多应用程序支持似乎有些有限 似乎使用 XCUIApplication 我可以使用 Bun
  • 如何在同一个Java流中正确提交和获取多个Futures?

    我尝试提交并获得 10Futures 在同一个流中 每个都需要 1 秒来处理 我想并行运行它们 我的第一次尝试是takes 10 sec 它按顺序运行 需要 10 秒 我的第二次尝试是takes 1 sec 并行运行 耗时 1 秒 然而它使
  • 如何使用 NEST 客户端将 Elasticsearch 配置为使用 AutoMap 类型作为动态映射对象的默认模板?

    我动态地将对象添加到索引中 因此它们都使用 default 映射进行索引 这是有问题的 因为它会导致诸如Guid被映射为text字段而不是作为keyword The AutoMap https www elastic co guide en
  • JavaScript 中的 360 度旋转视图 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我如何获得每个工作的詹金斯许可?

    有些工作推向质量检查 有些工作推向生产 只应允许开发人员推送到 QA 并且只应允许 QA 推送到生产 除了创建两个独立的构建服务器 通过某种方式共享工件 之外 我如何限制权限 你需要基于项目的矩阵授权策略在全局配置和作业配置中 使用启用基于
  • Flask SQLAlchemy 对关系中的对象进行分页

    所以我有两个模型 文章和标签 以及正确设置的 m2m 关系 我有一条 文章 标签 类型的路线 我想仅显示与该标签相关的那些文章 我已经解决了这个问题 但我正在寻找更优雅的解决方案 包括分页但我无法使用paginate在文章列表上 因为它不是
  • 条件构造在 Python 正则表达式中不起作用

    我是 python 的新手 我想在中使用我的正则表达式re sub 我试穿了regex101 https regex101 com r InljCc 1它有效 不知何故 当我尝试在我的 python 版本 3 6 上使用它时 它无法正常工作
  • “无法设置插件占位符”消息?

    Xcode 9 1 模拟器10 0 操作系统 10 12 6 我想将我的贴纸包的新版本上传到 iTunes Connect 但 产品 gt 存档 是灰色的 所以我运行模拟器并得到 无法为 名称 设置插件占位符 在全世界任何地方只有一个答案
  • 这两种关系对于联合运算是否兼容?

    我不确定以下两种关系是否适合联合 R lt schema name B 1 2 2 3 3 And Q lt schema name A B 5 1 6 1 4 2 3 4 我想加入工会 Q U R 可以吗 结果如何 并集运算符要求两个关系
  • svn:ignore 的双重性质

    阅读周围 svn ignore 命令似乎以两种方式之一工作 如果文件或目录尚未处于版本控制之下 则元数据将添加到存储库中 而忽略签出该项目的所有其他团队成员的文件或目录 如果文件或目录已处于版本控制之下 则忽略将仅在本地应用 并且不会将元数
  • 将数据框组合成列表

    我正在尝试将多个数据帧存储在列表中 但是 在某些时候 数据帧最终会转换为列表 因此我最终会得到一个列表列表 我真正想做的就是将所有数据帧以某种结构保存在一起 这是失败的代码 all dframes lt list initialise a
  • WinSCP 命令行被动模式

    我通过命令行调用 WinSCP 但我不知道如何为脚本正确设置被动模式 现在是脚本 option batch on option confirm off open ftp user and pass details 21 cd out opt
  • Spring/Hibernate 连接泄漏与 ScrollableResults

    我目前正在调查以下问题 该问题也影响我们的生产环境https github com querydsl querydsl issues 3089 https github com querydsl querydsl issues 3089 这
  • 递归多对多关系的相关名称不起作用

    多对多 非递归 class A models Model pass class B models Model parents models ManyToManyField A related name children gt gt gt A