Skip to content Skip to sidebar Skip to footer

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()"