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