Django model admin add form stuck

Consider this

@admin.register(Personal, site=admin_site)
class PersonalAdmin(admin.ModelAdmin):
    form = ChangePersonalForm
    add_form = AddPersonalForm

    def get_form(self, request, obj=None, **kwargs):
        if not obj:
            self.form = self.add_form

        return super(PersonalAdmin, self).get_form(request, obj, **kwargs)

When you first start the object creatingor the changingobject will work fine. But, after you createobject, every time you try changean object, you get add_forminsteadform

I fixed this by adding an else block

@admin.register(Personal, site=admin_site)
class PersonalAdmin(admin.ModelAdmin):
    change_form = ChangePersonalForm
    add_form = AddPersonalForm

    def get_form(self, request, obj=None, **kwargs):
        if not obj:
            self.form = self.add_form
        else:
            self.form = self.change_form

        return super(PersonalAdmin, self).get_form(request, obj, **kwargs)

As if there was some kind of caching class.

Does anyone know why?

+4
source share
1 answer

Django . django, , , , , . , () , , (add_form). Django . Ref https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1006

. , "form" , use change_form

@admin.register(Personal, site=admin_site)
class PersonalAdmin(admin.ModelAdmin):
    change_form = ChangePersonalForm
    add_form = AddPersonalForm

    def get_form(self, request, obj=None, **kwargs):
        if not obj:
            self.form = self.add_form
        else:
            self.form = self.change_form

        return super(PersonalAdmin, self).get_form(request, obj, **kwargs)
+3

Source: https://habr.com/ru/post/1680606/


All Articles