将管理员中的字段设置为只读,具体取决于用户



我试图在 django 管理员中仅授予员工用户对他自己的用户记录的更改访问权限,但也对其他员工用户的记录具有只读视图。我可以通过定义get_readonly_fields方法中的字段来轻松做到这一点。但是每当我向模型添加一个字段时,我也必须在那里添加它(如果我忘记了它的大麻烦)。

所以我试了这个(在SO的某个地方找到):

def get_readonly_fields(self, request, obj=None):
    my_readonly_fields= list(set([field.name for field in self.opts.local_fields] 

但是,这将使排除的字段重新出现(始终显示只读字段),这是我不想要的。

有没有办法获取有效字段?get_fields方法我不能调用,因为它会尝试调用get_readonly_fields方法。或者有没有更好的方法来做到这一点?

假设您不使用ModelAdmin.get_fieldsModelAdmin.get_fieldsets来生成字段列表,您只需浏览self.fieldsself.fieldsets并从readonly_fields列表中排除这些字段。

具体说来:

def get_readonly_fields(self, request, obj=None):
    my_readonly_fields = [
        field.name
        for field in self.opts.local_fields
        if field.name not in self.fields]
    return list(set(my_readonly_fields))

相关内容

最新更新