django admin make a field read-only when modifying obj but required when adding new obj

后端 未结 7 1557
甜味超标
甜味超标 2020-12-04 09:31

In admin I would like to disable a field when modifying object, but make it required when adding new object.

Whats the django way to go about this one?

7条回答
  •  渐次进展
    2020-12-04 10:10

    You can do this by overriding the formfield_for_foreignkey method of the ModelAdmin:

    from django import forms
    from django.contrib import admin
    
    from yourproject.yourapp.models import YourModel
    
    class YourModelAdmin(admin.ModelAdmin):
    
        class Meta:
            model = YourModel
    
        def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
            # Name of your field here
            if db_field.name == 'add_only':
                if request:
                    add_opts = (self._meta.app_label, self._meta.module_name)
                    add = u'/admin/%s/%s/add/' % add_opts
                    if request.META['PATH_INFO'] == add:
                        field = db_field.formfield(**kwargs)
                    else:
                        kwargs['widget'] = forms.HiddenInput()
                        field = db_field.formfield(**kwargs)
                return field
            return admin.ModelAdmin(self, db_field, request, **kwargs)
    

提交回复
热议问题