我试图在 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_fields
或ModelAdmin.get_fieldsets
来生成字段列表,您只需浏览self.fields
或self.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))