Django InlineModelAdmin无法正确显示inlineformset

时间:2019-04-25 20:07:56

标签: python django django-select2

我正在开发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小部件。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为您的代码中有一个错误,其中您的FichaTecnicaInline类被您的管理类定义覆盖。

默认情况下,可能是由inlineformset_factory创建的formset类(使用您的自定义表单)被admin.TabularInline覆盖。我认为首先要尝试给他们使用不同的名称。