我正在开发Django应用程序,其中许多模型具有外键和m2m关系。这导致许多ModelChoiceField
在我的模型的Django管理员中显示。为了使模型选择更合理,我在项目中安装了django-select2应用程序。
我一直在尝试在编辑相关对象时以管理网站显示的内联形式实现select2,但是该形式不呈现ModelSelect2Widget
(它呈现简单的选择;它甚至不包含select2库)。
我尝试的是在ModelForm
中创建一个forms.py
来覆盖相关的字段小部件,然后使用inlineformset_factory
来保存工厂类的变量。最后,在admin.py
中,使用formset
类的InlineModelAdmin
属性添加了自定义内联表单集。
forms.py
class FichaTecnicaForm(forms.ModelForm):
class Meta:
model = models.FichaTecnica
exclude = ('pelicula',)
widgets = {
'responsable': ModelSelect2Widget,
'cargo': ModelSelect2Widget,
'pais': ModelSelect2Widget
}
FichaTecnicaInline = inlineformset_factory(models.Pelicula, models.FichaTecnica, form=FichaTecnicaForm)
admin.py
class FichaTecnicaInline(admin.TabularInline):
model = models.FichaTecnica
formset = forms.FichaTecnicaInline
extra = 0
# Some other code here
# This is where the inlines are invoked
class PeliculaAdmin(admin.ModelAdmin):
inlines = [
FichaTecnicaInline,
# some other inlines, not relevant...
]
我期望内联表单集将显示用于模型选择的select2小部件,但是它将显示标准的select小部件。
非常感谢您的帮助!
答案 0 :(得分:0)
我认为您的代码中有一个错误,其中您的FichaTecnicaInline类被您的管理类定义覆盖。
默认情况下,可能是由inlineformset_factory创建的formset类(使用您的自定义表单)被admin.TabularInline覆盖。我认为首先要尝试给他们使用不同的名称。