我正在使用这个django项目,如果他们没有更改权限(他们不能拥有更改权限),则不允许用户在row_id_field弹出窗口中选择条目(用户条目)所有)。如果我在admins.py上移除了ModelForm类上的raw_id_fields属性,那么选择标记列表就不会发生这种情况。
如果根据不同的界面设置更改,此权限行为如何保持一致?我的意思是,如果用户显示为选择标记,则用户只有权选择表单上的用户。在我看来,这是一个很大的一致性失败与django权限的设计方式,在我看来,除了can_ |添加,更改,删除之外,我应该具有本机can_view权限。
在谷歌搜索时,我发现了一些讨论这个问题的主题,但是所有这些主题最终都找到了一些对我来说并不简单的非常痛苦的解决方案。我想知道如果这么简单的事情可以有一个直截了当的解决方案,不需要我很多的工作。
这是一个看起来像我的实际代码的例子:
class Project(models.Model):
manager = models.ForeignKey(User)
...
class ProjectAdmin(admin.ModelAdmin):
raw_id_fields = ['manager',]
...
答案 0 :(得分:2)
正如你所说,这真的很奇怪。这就是为什么我选择"延伸" django管理员有时会根据我的具体要求。
实现此目标的最简单方法是覆盖引用的ModelAdmin的has_change_permission
当您将请求对象作为方法的参数时,您可以评估:
该方法的简单原型:
def has_change_permission(self, request, obj=None):
if obj is None and '_popup' in request.GET:
return True
return super(MyAdmin, self).has_change_permission(request, obj)