Django Admin中的动态字段

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

与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)

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

回答:

这是解决问题的方法。感谢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

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

以上是 Django Admin中的动态字段 的全部内容, 来源链接: utcz.com/qa/419589.html

回到顶部