一尘不染

Django Admin中的动态字段

django

我想要有关一个字段值的其他字段。为此,我构建了一个自定义管理表单以添加一些新字段。

与jacobian 1的博客文章相关,这是我想出的:

class ProductAdminForm(forms.ModelForm):
    class Meta:
        model = Product

    def __init__(self, *args, **kwargs):
        super(ProductAdminForm, self).__init__(*args, **kwargs)
        self.fields['foo'] = forms.IntegerField(label="foo")

class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm

admin.site.register(Product, ProductAdmin)

但是其他字段“ foo”不会显示在管理员中。如果我像这样添加字段,则所有工作都很好,但没有按要求动态化,以添加有关模型的另一个字段的值的字段

class ProductAdminForm(forms.ModelForm):

    foo = forms.IntegerField(label="foo")

    class Meta:
        model = Product

class ProductAdmin(admin.ModelAdmin):
    form = ProductAdminForm

admin.site.register(Product, ProductAdmin)

那么,有没有我必须再次触发以使新字段起作用的初始化方法?还是有其他尝试?


阅读 557

收藏
2020-04-02

共1个答案

一尘不染

这是解决问题的方法。感谢koniiiik,我尝试通过扩展* get_fieldsets *方法来解决此问题

class ProductAdmin(admin.ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        fieldsets = super(ProductAdmin, self).get_fieldsets(request, obj)
        fieldsets[0][1]['fields'] += ['foo'] 
        return fieldsets

如果你使用多个字段集,请确保使用适当的索引将其添加到正确的字段集。

2020-04-02