在 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】:您可以根据当前对象修改内联,只需覆盖ModelAdmin
的change_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 中禁用/隐藏不必要的内联表单的主要内容,如果未能解决你的问题,请参考以下文章