【问题标题】:Django Many To Many Insert OrderingDjango多对多插入排序
【发布时间】:2010-12-25 05:31:51
【问题描述】:

我们已经为此苦苦挣扎了几天,并在网络上进行了大量搜索。

我们正试图弄清楚如何在 Django 表单中为多对多字段保存条目。

例如,我们有一个与图像具有多对多关系的新闻模型。当我们将图像添加到新闻文章时,例如id 为 10,2,14 的图像在保存新闻文章表单时我们可以看到 post 值如下:

  • 照片 10
  • 照片 2
  • 照片 14

当我们查看多对多交集表时,顺序并没有被保留。我们看不出照片插入的顺序有什么逻辑。

希望这是有道理的!

非常感谢您提前回答。

阿里夫

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    Django 不保证保留多对多关系的顺序。如果您需要这个,您应该使用带有显式“订单”字段的through 表。

    【讨论】:

    • 丹尼尔,这是一个巨大的帮助,非常感谢您的回复。查看了您链接到的文档似乎可以解决问题。谢谢。阿里夫
    • 订购理念也会帮助我,谢谢。但是你将如何定义查询呢?请在这篇文章中看看我的模型stackoverflow.com/questions/18442797/…
    • 我在中间/直通模型上使用了 created=models.DateTimeField(auto_now_add=True) 来了解插入顺序。然后我可以使用 .order_by('created')
    • 感谢您的澄清。这是不幸的,因为维护 m2m 数据的顺序似乎是一个非常普遍的要求(或至少是一个重要的便利),并且使用直通模型会增加相当多的额外代码和复杂性。看起来这可能是一个临时修复:github.com/gregmuellegger/django-sortedm2m
    • 还支持 sortedm2m 吗?它显示为“构建失败”,并指向已失效的 Travis 服务...
    【解决方案2】:

    幸运的是,现在可以在多对多关系中保留顺序没有使用通过模型的额外复杂性sortedm2m 这是 django 自己的 ManyToManyField 的直接替代品。

    https://github.com/gregmuellegger/django-sortedm2m

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2014-03-30
    • 2015-03-31
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多