我想动态地将CharField更改为ChoiceField,因为我希望从当前请求确定的可能性列表中选择值。
在ModelAdmin中,我可以使用get_form()来做,只需说:
form.base_fields[field_name] = forms.ChoiceField(...)
但是我如何为InlineModelAdmin(TabularInline)做同样的事情? 我通过get_formset()和get_fieldsets()稍微步了一下,但找不到适合挂钩的地方。
答案 0 :(得分:3)
您可以使用get_formsets
方法,例如get_form
用于内联。这是django.contrib.admin.options.ModelAdmin
的默认版本:
def get_formsets(self, request, obj=None):
for inline in self.inline_instances:
yield inline.get_formset(request, obj)
答案 1 :(得分:1)
这是Django(2.1.4)最新版本的更新版本:
def get_formsets_with_inlines(self, request, obj=None):
formsets = super(MyAdminClass, self).get_formsets_with_inlines(request, obj)
for i in self.inlines:
form = i.form
# Do stuff with the form
form.base_fields['my_field'] = forms.BooleanField(widget=forms.CheckboxInput(attrs={'checked': True}))
return formsets
将此添加到您的主管理员模型类中,而不是内联。
答案 2 :(得分:-1)
您可以为InlineModelAdmin提供表单类:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-options
或者对于动态内容,您可以覆盖get_form方法:
https://github.com/django/django/blob/master/django/contrib/admin/options.py#L431