我想在Django Admin中通过一个在模型中实际上不作为字段存在的值在模型上实现日期范围过滤。我想从django-admin-rangefilter
包中使用类似the date range picker的DateRangeFilter
假设模型有date
字段,我们希望显示对象,其中date - 7
位于指定范围之间(只是一个人工示例)
我已经创建了一个自定义过滤器类
class CustomDateFilter(DateRangeFilter):
title = "custom_date"
def queryset(self, request, queryset):
queryset = queryset.annotate(custom_date=F("date") - 7)
if self.form.is_valid():
validated_data = dict(self.form.cleaned_data.items())
if validated_data:
return queryset.filter(
**self._make_query_filter(request, validated_data)
)
return queryset
但是它的使用会导致FieldDoesNotExist ...
错误(如果使用它):
@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
list_filter = [("custom_date", CustomDateFilter)]
或
SystemCheckError: System check identified some issues:
ERRORS:
<class '...SomeModelAdmin'>: (admin.E114) The value of 'list_filter[0]' must not inherit from 'FieldListFilter'.
如果使用,则:
@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
list_filter = [CustomDateFilter]
我怎样才能实现我想做的事情
首先,您正在尝试:
这是错误的。日期是日期字段(Django默认日期格式:yyyy-mm-dd)。我们可以这样做:
您正在覆盖来自
django-admin-rangefilter
包的DateRangeFilter类的以下默认queryset方法似乎您正在尝试在筛选之后添加动态字段。尝试这样做:
在过滤之前
因此queryset方法类似于:
相关问题 更多 >
编程相关推荐