Skip to main content
 首页 » 编程设计

python之使 django 只读字段在管理员可见

2024年08月25日30lyj

我正在开发一个 Django 项目,我想在其中允许用户仅在 add_view 上编辑特定字段。所以我已经覆盖了 admin.py 上的 change_view 方法,所以它可以在那里设置我的 readonly_fields。但是 Django 不会显示 readonly_fields。

不显示只读字段对我来说似乎真的很奇怪。我的意思是,如果它是只读的,它说读的部分在哪里?它应该是可读的(仅),而不是可编辑的。如果我想隐藏它,应该有一个名为 hidden_​​fields 之类的选项。你们不同意吗?

我想知道是否有任何直接的方法可以让 readonly_fields 在我的管理员上可见,但不可编辑。

我的 admin.py 看起来像这样:

从 django.contrib 导入管理员 从 core.models 导入框

class BoxAdmin(admin.ModelAdmin): 
    def change_view(self, request, object_id, form_url='', extra_context=None): 
        self.readonly_fields = ('colour',) 
        return super(BoxAdmin, self).change_view(request, object_id) 
 
    def add_view(self, request, form_url='', extra_context=None): 
        self.readonly_fields = [] 
        return super(BoxAdmin, self).add_view(request, extra_context=c) 

请您参考如下方法:

您应该覆盖 get_readonly_fields,而不是设置 self.readonly_fields .

def get_readonly_fields(request, obj=None): 
    if obj is None:  # add form 
        return [] 
    else: 
        return ['colour']