【问题标题】:How to limit queryset/the records to view in Django admin site?如何限制查询集/记录在 Django 管理站点中查看?
【发布时间】:2011-01-17 18:28:24
【问题描述】:

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

【问题讨论】:

  • 您的意思是默认情况下,还是只是希望更改列表页面中提供该选项?
  • 默认情况下。每当我加载页面时,它只显示表示某些要求的记录。这些要求可以在后端更改。
  • 还有,如何让它们显示在更改列表页面中?

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


【解决方案1】:

在您的管理员定义中,您可以定义一个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 我很高兴看到这个,结果它变得如此简单!谢谢!
  • 但是通过这种方式,如果您想搜索其他用户,则无法获得其他用户的查询。所以它并没有按照我阅读的方式回答问题。
  • 由于 Django 1.6 queryset 已被 get_queryset 取代
【解决方案2】:

我知道这有一个“可接受的答案”,但我只是想把它扔在那里,因为我在追求其他东西时遇到了这个答案,并意识到我有一个替代解决方案,我发现并经常使用它让我更细化水平控制比接受的答案。

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)

【讨论】:

  • 看看那里发生了什么!他的回答很好……你的更好。出色的工作。
  • 这是一个更清洁的解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2012-03-31
  • 2021-07-25
  • 2018-10-10
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多