【问题标题】:ForeignKey fields in add/change forms - Django admin添加/更改表单中的 ForeignKey 字段 - Django 管理员
【发布时间】:2019-02-03 14:29:15
【问题描述】:

假设我有这些模型作为一个简单的例子:

class Event(models.Model):
    name = models.CharField(max_length=50, default='')
    app = models.ForeignKey(App)

class App(models.Model):
    name = models.CharField(max_length=50, default='')
    app_config = models.ForeignKey(AppConfig)

class AppConfig(models.Model):
    type = models.CharField(max_length=50, default='')
    is_valid = models.BooleanField(default=True)

我想创建一个带有 Event 的添加/更改表单的管理页面,这将允许我选择一个 App 并创建 AppConfig 及其所有字段。

基本上,要有一个带有下拉列表的表单来选择App,并在其下方有一个表单来填写AppConfig 字段。甚至只是一个“+”号或将弹出一个表单以创建AppConfig 的链接。

我看到了许多如何将其添加到 list_display 的示例(例如 this),但无法对 fieldsfieldsets 执行相同操作,以便将其添加到 /换个形式。

任何建议将不胜感激。 谢谢!

注意:我知道如果我在 Event 中也有 AppConfig 作为外键,这可能会很容易解决,但这没有任何意义。

编辑:我的 Django 和 Python 版本:
Python:2.7.x
Django:1.7.4

Edit2:我发现了这个不错的开源代码django_reverse_admin,它可能会有所帮助,但首先,这个特定的包只支持 Django 2.0+。我尝试使用似乎支持以前的 Django 版本的原始代码,但没有设法将其应用于我的特定案例。
如果有人有想法或可以告诉我如何在我的特定情况下使用它,那就太好了。谢谢!

【问题讨论】:

  • 你尝试过管理员内联吗?
  • 嘿@Walucas - 管理员内联是相反的方式。它们用于相反的方向。我实际上最近找到了django_reverse_admin,但无法让它适用于我的案例。如果有人可以展示一种使用它来解决我的具体案例的方法,那就太好了!谢谢!
  • 现在还不清楚你想要什么......据我了解,你想在一个管理页面中管理三个(或两个)模型,是吗?
  • @Walucas 我想要一个Event 管理页面,在为该事件选择App 之后,能够编辑它的AppConfig 字段,所有这些都在同一个管理员添加/改变形式。谢谢!
  • 明白了!你想要一个嵌套的内联像:github.com/theatlantic/django-nested-... 或 github.com/BertrandBordage/django-super-inlines 看看,让我知道

标签: python django django-forms django-admin


【解决方案1】:

此软件包允许您通过向模型添加自定义外键或多对多字段来快速过滤或分组“链接”模型。这将使用 AJAX 查询仅加载适用的链式对象。

https://github.com/digi604/django-smart-selects

我想,解决方案已经在这里讨论过了 How to filter a dropdownlist in Django's admin when a selection is made on another dropdownlist

【讨论】:

  • 嘿@aldyahsn,我不确定这对我有什么帮助。我认为如果我在First 中也有Third 作为外键,那么我可以使用它,但这不是我的情况。如果你仍然认为使用这个包可以解决,你能举个例子吗?谢谢!