【问题标题】:Django admin: Inline of a Many2Many model with 2 foreign keysDjango admin:内联具有 2 个外键的 Many2Many 模型
【发布时间】:2011-03-02 09:56:28
【问题描述】:

在绞尽脑汁好几天之后,我只是希望有人能指出我正确的方法。 我有 4 个模型:页面、元素、样式和帖子。

这是我的简单 models.py/admin.py 摘录:http://pastebin.com/uSHrG0p2

两句话:

一个元素引用 1 个样式和 1 个帖子(2 个 FK)。

一个页面可以引用很多元素,元素可以被很多页面引用(M2M)。

在页面实例的管理站点上,我将 M2M 关系包含为“内联”。这样我就有多行来选择元素实例。 一行看起来像:[My Post A with My Style X][V]

我想要的是用 2 个下拉列表替换那个下拉列表。一个包含所有 Post 实例,一个包含所有 Style 实例(就地创建 Element 实例)。这样一行看起来类似于 Element 管理站点:[My Post A][V] [My Style X][V]

听起来很简单,但在阅读和试用 ModelForms、ModelAdmins、Formsets 等 2 天后,我完全迷失了方向。 如果没有 Django 管理功能中的自定义视图/表单,我可以这样做吗?

我的一种方法是像这样从 PageAdminForm 访问 Post/Style 实例,尝试从中手动创建表单小部件...但未能这样做:

p = Page.objects.get(pk=1)
f = PageAdminForm(instance=p)
f.base_fields['elements'].choices.queryset[0].post

有什么建议或提示我需要走哪条路吗? 感谢您的宝贵时间!

【问题讨论】:

    标签: django many-to-many admin inline-formset


    【解决方案1】:

    在删除 M2M 字段并将 Elements 链接到具有 Element 中的第三个 ForeignKey 的页面后,我得到了我想要的:

    class Element(models.Model):
        page = models.ForeignKey(Page)        
        post = models.ForeignKey(Post)
        style = models.ForeignKey(Style)
    

    实际上,非 M2M 链接毕竟对我的应用程序更有意义。

    给自己的备忘录:在试图超越 Django 之前重新考虑模型关系 :-(

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2020-05-07
      • 2011-08-10
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2012-04-19
      • 2010-10-09
      相关资源
      最近更新 更多