代码之家  ›  专栏  ›  技术社区  ›  M. Ryan

Django:在Django管理中过滤或显示模型方法

  •  2
  • M. Ryan  · 技术社区  · 16 年前

    我有一个带有过期日期字段的模型。

    我想设置一个管理员过滤器,允许用户在“未过期”和“任何”之间切换。

    但是,在AdminForm中将其指定为字段或筛选器参数并不是自动的。

    这样的事情可能发生吗?如果不可能,什么才是明智的解决办法。。。

    1 回复  |  直到 16 年前
        1
  •  5
  •   akaihola dnlcrl    16 年前

    您可以在管理站点上注册两次该模型 ModelAdmin 为它上课。您可以覆盖 queryset() 方法 模型管理员 自定义显示哪些实例。请注意,您需要定义一个模型代理,并在第二个示例中使用它 模型管理员

    models.py

    class ExampleModel(models.Model):
        expired = models.DateField()
    
    class ExpiredExampleModelProxy(ExampleModel):
        class Meta:
            proxy = True
            verbose_name = 'Expired Example'
            verbose_name_plural = 'Expired Examples'
    

    class NotExpiredExampleAdmin(models.ModelAdmin):
        def queryset(self, request):
            return (super(ExampleAdmin, self).queryset(request)
                    .filter(expiration__gte=date.today()))
    
    class ExpiredExampleAdmin(models.ModelAdmin):
        def queryset(self, request):
            return (super(ExampleAdmin, self).queryset(request)
                    .filter(expiration__lt=date.today()))
    
    admin.site.register(ExampleModel, NotExpiredExampleAdmin)
    admin.site.register(ExpiredExampleModelProxy, ExpiredExampleAdmin)
    

    而不是定制 ModelAdmin.queryset 您还可以为模型定义自定义管理器,以便在管理外部获得相同的筛选。

    另见