专业管理员根据用户查看对象的子集

时间:2013-08-07 02:22:51

标签: django-models django-admin

我是Django的新手,所以我可能完全偏离这里......

我已经看到很多关于在保存对象时能够访问当前用户的问题,但我的问题略有不同:我想使用(一个特殊的子类)admin来显示用户集对象,但只有他或她有权访问的对象。

目前我正在尝试通过创建一个特殊的“OpAdmin”应用程序来完成此操作,该应用程序的唯一目的是拥有此专业管理员。 OpAdmin模型看起来像这样:

class OperatorAircraftManager(models.Manager):  
    def get_query_set(self, user):
        return mainapp.models.Aircraft.objects.filter(owner=user.employer)

class Aircraft(mainapp.models.Aircraft):
    class Meta:
        proxy = True
    objects = OperatorAircraftManager()

但我很难理解如何将用户信息传递给get_query_set,或者这是否完全是错误的方法(我应该使用Groups或{ {1}}而不是?)同样,这不是关于使用新飞机保存用户信息,还是限制谁可以更改一个,而是限制谁可以在管理员中查看。任何建议将不胜感激---谢谢。

编辑:我应该补充一点,我还看到了一些用于Django的“获取当前用户”软件包,但它们看起来都有点hacky(例如查看当前的调用堆栈),所以我一直在不愿意走那条路。如果有一种可接受的方式来缓存关于请求上下文的一些共享信息,那么最好知道......

1 个答案:

答案 0 :(得分:2)

不确定“只有他或她可以访问的对象”是什么意思。但是,如果您想将所有对象限制为管理员中的各自所有者,那么您就是这样做的:

def queryset(self, request):
    """Limit Pages to those that belong to the request's user."""
    qs = super(PageAdmin, self).queryset(request)
    return qs.filter(owner=request.user)