如何限制查询集/记录在Django管理站点中查看?

如何限制查询集/记录在Django管理站点中查看?,django,django-models,django-admin,django-queryset,Django,Django Models,Django Admin,Django Queryset,默认情况下,Django管理站点显示相关模型/表的所有记录以供查看。如何仅显示满足特定条件的记录?在管理员定义中,可以定义一个queryset()方法,该方法返回该模型管理员的queryset。例如: class MyModelAdmin(admin.ModelAdmin): def queryset(self, request): qs = super(MyModelAdmin, self).queryset(request) return qs.fil

默认情况下,Django管理站点显示相关模型/表的所有记录以供查看。如何仅显示满足特定条件的记录?

在管理员定义中,可以定义一个
queryset()
方法,该方法返回该模型管理员的queryset。例如:

class MyModelAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(MyModelAdmin, self).queryset(request)
        return qs.filter(user=request.user)
然后,只有带有
user=request.user
的对象才会在管理员中可见。

我知道这有一个“已接受的答案”,但我只是想把它扔出去,因为我在追求其他东西的时候遇到了这个答案,并且意识到我有一个替代的解决方案,我发现并经常使用它,它比公认的答案提供了更细粒度的级别控制

class TestAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "FIELD":
            kwargs["queryset"] = TestModel.objects.filter(test=False)
        return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "FIELDS":
            kwargs["queryset"] = TestModel.objects.filter(test=False)
        return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

您的意思是默认情况下,还是只希望该选项可以从变更列表页面中使用?默认情况下。每当我加载页面时,它只显示表示某些需求的记录。这些需求可以在后端进行更改。此外,如何使这些需求显示在更改列表页面?+1我很高兴看到这一点,结果证明它非常简单!谢谢但通过这种方式,如果您想搜索其他用户,就不可能获得其他用户的查询。因此,它并没有以我阅读它的方式回答这个问题。因为Django 1.6
queryset
已被
get\u queryset
取代,看看那里发生了什么!他的回答很好。。。。。你的更好。这是一个非常干净的解决方案。非常感谢。