【问题标题】:How do I tell my ModelAdmin's filter to not show all records by default?如何告诉我的 ModelAdmin 的过滤器默认不显示所有记录?
【发布时间】:2011-10-15 01:01:54
【问题描述】:

我像这样在我的 django 管理页面中添加了一个过滤器下拉列表。

class MyAdmin(admin.ModelAdmin):
    list_filter = ('status',)

默认情况下,如果您在管理视图中转到模型,则默认显示所有记录。 但我希望它过滤:

status="open"

并默认显示。这可以实现吗?

【问题讨论】:

标签: python django


【解决方案1】:

我认为您需要的是 ModelAdmin.ordering https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.ordering

如果您只需要 status='open' 您可以为您的模型管理员定义一个自定义默认查询集 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset 并限制了你的 仅列出 status='open' 的项目。 (注意)但是在这种情况下,其他记录(状态!='open')将无法从管理员那里访问。

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以在模型中重新定义默认模型管理器

        class myManager(models.Manager):
             return self.filter(status = 'open')
    
        class myModel(models.Model):
             ...
             objects = myManager()
    

    但我认为还有更优雅的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2016-12-17
      • 2018-11-11
      • 1970-01-01
      相关资源
      最近更新 更多