在 django admin 中禁用/隐藏不必要的内联表单

Posted

技术标签:

【中文标题】在 django admin 中禁用/隐藏不必要的内联表单【英文标题】:Disable/Hide unnecessary inline forms in django admin 【发布时间】:2014-11-04 12:59:33 【问题描述】:

我有模型“产品”模型和许多其他模型,它们的外键是产品。 目前我有 ProductAdmin 这条线

class Product:
    type_of_product=models.ChoiceField()

class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm
    inlines = [Inline1, Inline2, Inline3, Inline4,....Inline 15]

所以产品管理员添加页面看起来非常大。这里我只需要根据 type_of_product 的值填充部分模型内联。如此多的内联模型条目是空的。

所以本质上内联与产品的 type_of_product 属性有关。目前,用户必须注意他必须根据他选择的 type_of_product 在哪些内联中填充值。

现在我想解决这个问题。

选项 1) 根据用户通过 AJAX 选择的 type_of_product 动态呈现内联表单。(不知道怎么做)

选项 2) 禁用或隐藏不必要的内联,这样他就看不到不相关模型的内联形式。

谁能帮忙解决一下。

【问题讨论】:

【参考方案1】:

您可以根据当前对象修改内联,只需覆盖ModelAdminchange_view 方法。在您的ProductAdmin 中添加如下内容:

def change_view(self, request, object_id, form_url='', extra_context=None):
    product = Product.objects.get(pk=object_id)
    current_inlines = []
    # CODE TO FILL INLINES BASED ON PRODUCT
    self.inlines = current_inlines
    return super(ProductAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context)

【讨论】:

感谢您的回答。我也想过以这种方式实现,但我想动态地做到这一点。所以最初当加载产品管理员时,所有内联都应该在那里,但是当用户选择产品的 type_of _field 属性时,其他不相关的内联应该被隐藏。我已经修复了要显示的 type_of_field 与内联的映射 好的,所以如果你想这样做,你必须扩展这个特定应用程序的默认模板并添加一些 javascript 以在 type_of_product 更改时隐藏内联组。每个内联都有唯一的 ID(如 INLINE-MODEL_set-group),所以应该相当容易。

以上是关于在 django admin 中禁用/隐藏不必要的内联表单的主要内容,如果未能解决你的问题,请参考以下文章

在 Django Admin >= 1.4 中禁用多重排序

如何在django-admin中隐藏特定记录的字段?

Django admin禁用外键下拉但保留添加按钮旁边

Django Admin 根据其他选择动态禁用字段

禁用prefers-color-scheme:django admin中的dark

Django admin - 如何在用户编辑中隐藏一些字段?