M. *_*yan 2 django django-models django-admin
我有一个带有过期DateField的模型.
我想设置一个Admin过滤器,允许用户在"Not Expired"和"Any"之间切换.
模型方法相当简单,日期比较,没问题.
但是,在AdminForm中将其指定为字段或过滤器参数不是自动的.
这样的事情是否可能,如果不是,那将是一个明智的解决方案......
我甚至会开放某种自动删除过期行,但我不知道如何开始这条路.
您可以通过为管理站点注册两个ModelAdmin类来在管理站点上包含该模型两次.您可以覆盖自定义显示哪些实例的queryset()方法ModelAdmin.请注意,您需要定义模型代理并在第二个ModelAdmin类中使用它,否则Django会抱怨两次注册相同的模型.
class ExampleModel(models.Model):
expired = models.DateField()
class ExpiredExampleModelProxy(ExampleModel):
class Meta:
proxy = True
verbose_name = 'Expired Example'
verbose_name_plural = 'Expired Examples'
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
除了自定义之外,ModelAdmin.queryset您还可以为模型定义自定义管理器,以便在管理员之外获得相同的过滤.
也可以看看
| 归档时间: |
|
| 查看次数: |
1800 次 |
| 最近记录: |