Как использовать add_form для администрирования Django?

Как правильно использовать add_form в панели администратора, когда класс наследуется от admin.ModelAdmin. Я нашел хак с переопределением метода get_form, где можно динамически изменять form на add_form значение. При текущем подходе я получаю эту ошибку

formsets, inline_instances = self._create_formsets(request, form.instance, change=False)
AttributeError: 'UserForm' object has no attribute 'instance'

form.py

class AddCustomProductForm(forms.Form):

    users = forms.ChoiceField(
        label='Select a Profile',
        required=True,
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["users"].choices = CustomUser.objects.all()

admin.py

class PostAdmin(admin.ModelAdmin):

    list_display = ('email', 'created', 'company_id',)
    add_form = AddCustomProductForm
    form = CustomProductForm
    fieldsets = (
        (None, {"fields": ("users")}),
    )

    def get_form(self, request, obj=None, **kwargs):
        defaults = {}
        if obj is None:
            defaults['form'] = self.add_form
        defaults.update(kwargs)
        return super().get_form(request, obj, **defaults)

Вам нужна ModelForm, где вы берете значения непосредственно из модели (в данном случае ModelAdmin) в форме.

https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/

Другой способ - сделать "свою" панель администратора.

Вернуться на верх