Django InlineModelAdmin не отображает inlineformset правильно - PullRequest
0 голосов
/ 25 апреля 2019

Я разрабатываю приложение 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 для выбора модели, но вместо этого он отображает стандартный виджет выбора.

Заранее большое спасибо за помощь!

1 Ответ

0 голосов
/ 26 апреля 2019

Я думаю, что в вашем коде есть ошибка, когда ваш класс FichaTecnicaInline перезаписывается определением класса администратора.

Возможно, класс formset, созданный inlineformset_factory, который использует вашу пользовательскую форму, перезаписывается по умолчанию из admin.TabularInline. Я думаю, что первое, что нужно попробовать, это дать им разные имена.

...