Django DateTimeRangeField与date_hierarchy一起使用

时间:2017-09-28 14:43:24

标签: django python-3.x django-models django-admin

我有DateTimeRangeField我希望与django date_hierarchy一起使用但date_hierarchy需要DateFieldDateTimeField

我已经编写了一个函数,可以使用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

有没有办法将DateTimeRangeFielddate_hierarchy一起使用?

1 个答案:

答案 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')
        )