Django - Overriding get_form to customize admin forms based on request

后端 未结 8 986
眼角桃花
眼角桃花 2020-12-04 18:15

I\'ve tried various methods to achieve this.

I decided against overriding formfield_for_dbfield as it\'s doesn\'t get a copy of the request object and I was hoping t

8条回答
  •  北荒
    北荒 (楼主)
    2020-12-04 19:13

    In my case, with Django 2.1 you could do the following

    In forms.py

    class ObjectAddForm(forms.ModelForm):
    
        class Meta:
            model = Object
            exclude = []
    
    class ObjectChangeForm(forms.ModelForm):
        class Meta:
            model = Object
            exclude = []
    

    And then in the admin.py

    from your.app import ObjectAddForm, ObjectChangeForm
    
    class ObjectAdmin(admin.ModelAdmin):
        ....
        def get_form(self, request, obj=None, **kwargs):
            if obj is None: 
                kwargs['form'] = ObjectAddForm
            else:
                kwargs['form'] = ObjectChangeForm
            return super().get_form(request, obj, **kwargs)
    

提交回复
热议问题