我试图使所有字段都是只读的,而不显式地列出它们.

比如:

class CustomAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return self.readonly_fields

        return self.fields

问题是,此时未设置CustomAdmin.fields.

有什么主意吗?

推荐答案

请注意,self.model._meta.field不一定与CustomAdmin拥有的字段相同!

"管理员的所有字段"看起来更像这样:

from django.contrib import admin
from django.contrib.admin.utils import flatten_fieldsets

class CustomAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return self.readonly_fields

        if self.declared_fieldsets:
            return flatten_fieldsets(self.declared_fieldsets)
        else:
            return list(set(
                [field.name for field in self.opts.local_fields] +
                [field.name for field in self.opts.local_many_to_many]
            ))

Django相关问答推荐

django命令中的no_color不起作用

Django 5.0.2:TypeError:获取切片后无法过滤查询

""关系"core_Boundary_summary的列user_id中的空值"违反了非空约束|失败行包含(2,title,string,null)

当从 fastapi 发送请求时,Django 无法对 Postgres 执行查询

Django 关系嵌套related_name

Nginx 响应 404 not found on Django media URL in preprod, dev ok

基于每个条目的 Django Queryset 过滤

Django 在模型中存储用户图像

try 编辑/创建时,特定模型的 Django 管理员挂起(直到超时错误)

为用户添加自定义权限

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

如何动态检索 Django 模型类?

Django Admin:如何在同一视图中显示来自两个不同模型的字段?

如何覆盖 django 管理员翻译?

get_or_create() 是否必须立即保存?

如何在 django 中使用更少的 css?

如何动态访问 Django 模型字段详细名称?

只使用 Django 的某些部分?

Django - 保存新对象时如何获取 self.id?

防止 django 管理员转义 html