Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:在Django管理中过滤或显示模型方法_Django_Django Models_Django Admin - Fatal编程技术网

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

Django:在Django管理中过滤或显示模型方法,django,django-models,django-admin,Django,Django Models,Django Admin,我有一个带有过期日期字段的模型 我想设置一个管理员过滤器,允许用户在“未过期”和“任何”之间切换 模型方法是一个非常简单的数据比较,没有问题 但是,在AdminForm中将其指定为字段或筛选器参数并不是自动的 这样的事情可能发生吗?如果不可能,什么才是明智的解决办法 我甚至可以自动删除过期的行,但我不知道如何从这条路径开始。您可以在管理站点上注册两个ModelAdmin类,将该模型包含两次。您可以覆盖ModelAdmin的queryset()方法,以自定义显示的实例。请注意,您需要定义一个模型代

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

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

模型方法是一个非常简单的数据比较,没有问题

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

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


我甚至可以自动删除过期的行,但我不知道如何从这条路径开始。

您可以在管理站点上注册两个
ModelAdmin
类,将该模型包含两次。您可以覆盖
ModelAdmin
queryset()
方法,以自定义显示的实例。请注意,您需要定义一个模型代理,并在第二个
ModelAdmin
类中使用它,否则Django会抱怨注册同一个模型两次

models.py 管理员 除了自定义
ModelAdmin.queryset
之外,您还可以为模型定义自定义管理器,以便在管理外部获得相同的筛选

另见


太棒了。谢谢你的智慧。我有带代理模型的
X
,还有带代理模型的
Y
,还有带代理模型的
a
A
有一个外键指向
X
,当管理员中有人编辑
A
时,它会给他们一个小的绿色加号来添加一个型号
X
,或者从列表中选择一个。我想要的是,当他们在编辑代理模型
B
时,我想要那个小小的加号弹出页面,指向
X
的代理模型
Y
。这可能吗?
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)