我想要有关一个字段值的其他字段。为此,我构建了一个自定义管理表单以添加一些新字段。
与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 *方法来解决此问题
* 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
如果你使用多个字段集,请确保使用适当的索引将其添加到正确的字段集。