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