我的项目有多个模型和模型的自定义管理页面。所有模型都继承自“ BaseModel”。对于业务功能,我们必须更新“基本模型”以包括2个新字段。鉴于所有模型都继承了这2个新字段,它们现在在管理页面中显示为可编辑字段。根据业务功能,这两个字段应显示为只读字段
为了使字段为只读,我们通常在admin类中使用readonly_fields = [read ..]。有没有一种方法可以实现而无需接触所有管理员类?
答案 0 :(得分:2)
创建一个基本的管理模型类,并在每个管理模型类上使用它。 AFAIK,这将是您可以拥有的最佳解决方案
from django.contrib import admin
class BaseModelAdmin:
"""
The base model admin class
"""
readonly_fields = ["field_1", "field_2"]
class FooModelAdmin(BaseModelAdmin, admin.ModelAdmin):
"""
Inheriting the 'BaseModelAdmin' class here
"""
...
class BarModelAdmin(BaseModelAdmin, admin.ModelAdmin):
"""
Inheriting the 'BaseModelAdmin' class here
"""
def get_readonly_fields(self, request, obj=None):
"""
If you have "readonly_fields" that are specific to certain Model, override this method
"""
readonly_fields = super().get_readonly_fields(request, obj=None) + ["bar_field_1", "bar_field_2"]
return readonly_fields
admin.site.register(FooModel, FooModelAdmin) # registering the model in Django admin
admin.site.register(BarModel, BarModelAdmin) # registering the model in Django admin