【发布时间】:2015-07-07 18:36:27
【问题描述】:
我正在尝试根据当前登录的用户限制对 django 管理员中对象的访问。下面的示例对象。
class ObjectOne(models.Model):
other-objecs = models.ManyToManyField(OtherObject)
class OtherObject(models.Model):
somefield = models.TextField()
我已经为在管理站点注册的所有对象定义了 ModelAdmin 对象。我覆盖 get_queryset 并返回一个由属于特定用户的对象组成的子集
def get_queryset(self, request):
qs = super(ConfigurableMenuItemAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(organization__user_id=request.user.id)
当我直接列出一个对象时,此代码按我的预期工作,并且只显示属于登录用户的对象。但是,当添加/更改 ObjectOne 时,manytomany 字段会显示系统中的所有对象,无论谁登录。有什么方法可以做我想做的事情。我希望每个用户只能看到他们拥有的对象。
【问题讨论】:
-
你考虑过使用 Django Guardian 吗? django-guardian.readthedocs.org/en/v1.2
-
找到了解决方案 - 感谢 cmets。
标签: python django django-admin