如何限制对 django admin 中对象的访问

How to limit access to objects in the django admin

我试图根据当前登录的用户限制对 django 管理中对象的访问。下面的示例对象。

class ObjectOne(models.Model):
    other-objecs = models.ManyToManyField(OtherObject)

class OtherObject(models.Model):
    somefield = models.TextField()

我已经为在管理站点注册的所有对象定义了 ModelAdmin 对象。我覆盖了 get_queryset 和 return 一个由属于特定用户的对象组成的子集

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)

当我直接列出一个对象时,此代码按我预期的方式工作,并且只显示属于已登录用户的对象。但是,当 adding/changing ObjectOne 时,manytomany 字段显示系统中的所有对象,无论谁登录。有什么方法可以做我想做的事情。我希望每个用户只能看到他们拥有的对象。

For anyone that has a similar objective and comes across this question. In your ModelAdmin class you override formfield_for_manytomany and filter the queryset. Documentation Here