Django Admin Missing Add / Edit Buttons When Using Get_form()
When overriding the get_form() method in a ModelAdmin class, the 'Add' and 'Edit' (plus sign and pencil) icons do not appear next to any field on the admin page, even though permis
Solution 1:
To display the Add / Edit buttons on the Django admin change_form page when overriding the ModelAdmin's get_form()
you need to wrap the field's widget in a RelatedFieldWidgetWrapper
like so:
forms.py
from django import forms
from django.conf import settings
from django.contrib.admin.widgets import RelatedFieldWidgetWrapper
from django.db.models.fields.reverse_related import ManyToOneRel
defreservation_admin_form_factory(request, admin_site):
classReservationAdminForm(forms.ModelForm):
classMeta:
model = Reservation
exclude = []
def__init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
rel = ManyToOneRel(Reservation.guest, Guest, 'id')
self.fields['guest'].widget = RelatedFieldWidgetWrapper(
self.fields['guest'].widget, rel, admin_site,
can_change_related=True)
Note the above use of a form factory (reservation_admin_form_factory
) to capture the admin_site
object, which is needed by RelatedFieldWidgetWrapper
.
admin.py*
@admin.register(Reservation)classReservationAdmin(admin.ModelAdmin):
list_display = ('check_in_date', 'check_out_date')
defget_form(self, request, obj=None, **kwargs):
self.form = reservation_admin_form_factory(request, admin.site)
returnsuper().get_form(request, obj, **kwargs)
Post a Comment for "Django Admin Missing Add / Edit Buttons When Using Get_form()"