有没有办法在django管理员中过滤查询集?

有没有办法在django管理员中过滤查询集?,django,django-admin,Django,Django Admin,我试图为模型栏定义一个动作——但我只想要与用户Foo相关的栏对象列表 在我开始处理管理代码并传入自定义查询集(或者编写一个自定义视图劫持管理的多复选框支持)之前,我想我应该检查一下是否有办法按原样分割数据,以便获得列表视图 注意:我没有尝试按相关用户排序,也没有尝试向默认列表视图添加额外选项以按用户筛选;我需要一个特定的URL或视图,该URL或视图只为特定用户Foo提供一个Bar对象列表。它没有文档记录,但是标准的changelist视图接受普通的queryset过滤器参数作为GET参数。因此,

我试图为模型栏定义一个动作——但我只想要与用户Foo相关的栏对象列表

在我开始处理管理代码并传入自定义查询集(或者编写一个自定义视图劫持管理的多复选框支持)之前,我想我应该检查一下是否有办法按原样分割数据,以便获得列表视图


注意:我没有尝试按相关用户排序,也没有尝试向默认列表视图添加额外选项以按用户筛选;我需要一个特定的URL或视图,该URL或视图只为特定用户Foo提供一个Bar对象列表。

它没有文档记录,但是标准的changelist视图接受普通的queryset过滤器参数作为GET参数。因此,您可以:

/admin/myapp/bar/?user__username=foo

您只需在ModelAdmin上重写get_queryset()方法。大概是这样的:

class ThisAdmin(admin.ModelAdmin):
    def get_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).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(owner=request.user)

这种方法的优点是它不会把你漂亮的管理员URL弄得乱七八糟(因此,也会让你的用户非常清楚如何查看其他人对象)。

对于直接在管理员界面上编辑的模型,这种方法非常有效。如何在下拉列表中自动填充外键。
def queryset
是所有Django最新版本的
def get_queryset
。可能的列表如下: