向 ModelAdmin 表单添加额外字段

Posted

技术标签:

【中文标题】向 ModelAdmin 表单添加额外字段【英文标题】:Add extra fields to a ModelAdmin form 【发布时间】:2018-10-10 08:14:41 【问题描述】:

所以,我有一个 ModelAdmin,我需要添加额外的字段。这些字段在模型上是不存在的,但是会通过init方法动态添加到自定义的ModelForm中,clean里面的逻辑会在save时处理返回的数据。

我似乎找不到任何与将自定义非模型字段添加到 ModelAdmin 表单相关的可靠信息。我最接近的是通过覆盖 ModelAdmin 类上的 get_fields 并使用我想添加的新字段更新 self.form.declared_fields 。

这对我来说不是很干净,我很好奇是否有更好的方法可以动态地将新字段添加到 ModelAdmin?

【问题讨论】:

***.com/questions/8007095/… 这或多或少是我目前用来显示字段的东西,但它似乎并不太干净。我认为有一种更清洁更简单的方法。 django admin - add custom form fields that are not part of the model的可能重复 字段需要动态定义,不能静态属于表单。自定义字段是从其他地方的列表中加载的。 【参考方案1】:

你也可以使用这种方式添加models.py中没有的字段

在 admin.py:::

from django.utils.translation import gettext as _

class TrialAdmin(admin.ModelAdmin):
    fields = (..., 'non_model_field',...,)

    def non_model_field(self, instance):
    # this method name should be same as new field name defied above in fields.
        # [what u need to do here]

    non_model_field.short_description = _("non_model_field")
    #This value 'short_description' defines what the field name is shown as in admin similar to 'verbose_name' in models.

admin.site.register(..., TrialAdmin)

【讨论】:

以上是关于向 ModelAdmin 表单添加额外字段的主要内容,如果未能解决你的问题,请参考以下文章

如何向 symfony 2 表单添加一些额外的数据

如何在提交前向表单添加其他字段?

Spring Security在标准登录表单中添加一个额外的字段

WooCommerce:向 WC Vendors Pro 添加其他表单字段属性

向 Magento 的订阅模块添加自定义字段

只读表单字段格式