Как использовать 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/
Другой способ - сделать "свою" панель администратора.