我是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(例如查看当前的调用堆栈),所以我一直在不愿意走那条路。如果有一种可接受的方式来缓存关于请求上下文的一些共享信息,那么最好知道......
答案 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)