我有DateTimeRangeField
我希望与django date_hierarchy
一起使用但date_hierarchy
需要DateField
或DateTimeField
我已经编写了一个函数,可以使用range.lower
将范围转换为日期时间,但使用可调用函数似乎无法正常工作。
例如
@admin.register(models.MyModel)
class MyModelAdmin(AdvancedModelAdmin):
date_hierarchy = 'date_range_to_datetime'
def date_range_to_datetime(instance):
"""
Return a datetime from django date range.
"""
return instance.range.lower
有没有办法将DateTimeRangeField
与date_hierarchy
一起使用?
答案 0 :(得分:0)
尽管有其他地方的主张,但可以完成 。但是您需要做两件事。首先,您需要注释较低的值。然后,您需要告诉static-Admin-checks跳过_check_date_hierarchy
检查。
实际上这并不难,但是您必须知道自己在做什么。这是此操作的精简版本。 timeframe
是DateTimeRangeField。请注意,用作date_hierarchy值的内容对日期数据库有效,否则将一路炸毁。
from django.contrib.postgres.fields.ranges import RangeStartsWith
class SkipDateHeirarchyChecks(admin.checks.ModelAdminChecks):
def _check_date_hierarchy(self, obj):
return []
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
date_hierarchy = 'starts'
checks_class = SkipDateHeirarchyChecks
def get_queryset(self, request):
qs = super().get_queryset(request).annotate(
starts=RangeStartsWith('timeframe')
)