0

我正在开发一个 Django 应用程序,其中很多模型都有外键和 m2m 关系。这导致ModelChoiceField我的模型在 Django 管理中显示了许多。为了让模型选择更容易接受,我在我的项目中安装了 django-select2 应用程序。

我一直在尝试在管理站点在编辑相关对象时显示的内联表单中实现 select2,但该表单不呈现ModelSelect2Widget(它呈现一个简单的选择;它甚至不包括 select2 库)。

我尝试的是创建一个覆盖ModelForm相关forms.py字段的小部件,然后使用inlineformset_factory,有一个保存工厂类的变量。最后,在 中,使用类的属性admin.py添加了我的自定义内联表单集。formsetInlineModelAdmin

表格.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)

管理员.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 小部件,但它显示的是标准选择小部件。

非常感谢您的帮助!

4

1 回答 1

0

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

也许使用您的自定义表单的 inlineformset_factory 创建的表单集类被 admin.TabularInline 的默认值覆盖。我认为首先要尝试的是给他们不同的名字。

于 2019-04-26T01:51:03.087 回答