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

时间:2010-02-17 08:49:19

标签: django django-models django-admin django-queryset

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

2 个答案:

答案 0 :(得分:27)

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

class MyModelAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(MyModelAdmin, self).queryset(request)
        return qs.filter(user=request.user)

然后,只有user=request.user的对象才能在管理员中看到。

答案 1 :(得分:7)

我知道这有一个接受的答案"但我只是想把它扔出去,因为我在追求其他东西的时候遇到了这个答案,并意识到我有一个我发现并经常使用的替代解决方案这比我接受的答案提供了更精细的关卡控制。

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)