【问题标题】:Django DateTimeRangeField used with date_hierarchyDjango DateTimeRangeField 与 date_hierarchy 一起使用
【发布时间】:2018-03-10 08:45:11
【问题描述】:

我有一个 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 一起使用?

【问题讨论】:

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


    【解决方案1】:

    尽管其他地方声称,这可以做到。但是你需要做两件事。首先,您需要注释较低的值。然后你需要告诉静态管理员检查跳过_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')
            )
    

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 2013-06-19
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多