我正在尝试为模型栏定义一个动作 - 但我只想要与用户Foo相关的Bar对象列表。
在我开始在管理代码中乱码并传入自定义查询集(或编写一个劫持管理员的多重复选框支持的自定义视图)之前,我想我会检查是否有某种方法可以切片按原样上传数据,我得到一个列表视图。
注意:我不是要尝试按相关用户排序,而我不是要尝试在默认列表视图中添加额外选项以按用户进行过滤;我需要一个特定的URL或视图,它将 一个Bar对象列表提供给特定的用户Foo。
答案 0 :(得分:25)
没有记录,但标准的changelist视图接受普通的queryset过滤器参数作为GET参数。所以你可以这样做:
/admin/myapp/bar/?user__username=foo
答案 1 :(得分:25)
如果您使用的是1.1.x,那么传递自定义查询集实际上非常容易。您需要做的就是覆盖ModelAdmin上的queryset()方法。像这样:
class ThisAdmin(admin.ModelAdmin):
def queryset(self, request):
"""
Filter the objects displayed in the change_list to only
display those for the currently signed in user.
"""
qs = super(ThisAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(owner=request.user)
这实际上也可以在1.0.x分支中完成,但在ModelAdmin中需要更多的额外代码。
这种方法的优点在于它不会使您漂亮的漂亮管理URL混乱(因此,对您的用户来说,如何查看其他人对象非常明显)。