Django ORM作为查询集的字符串提取工作日

问题描述 投票:1回答:1

我想做的是用工作日字符串("monday", "tuesday"等注释一个查询集。

我了解如何获取int值:

queryset = queryset.annotate(
  weekday_int=ExtractWeekDay("date"),
)

但是我很难自己获取字符串值。我尝试使用ExpressionWrapper,但是F对象似乎无法与Date对象一起很好地播放。

我将postgres用作基础数据库,但找不到与通用lookup_name相关的Extract

django postgresql django-orm
1个回答
1
投票

我已经测试过:

import calendar


class ExtractWeekDayName(ExtractWeekDay):
    @property
    def output_field(self):
        return CharField()

    def convert_value(self, value, expression, connection, context):
        v = super(ExtractWeekDayName, self).convert_value(value, expression, connection, context)
        try:
            return calendar.day_name[int(v)].lower()
        except (ValueError, IndexError):
            return 'error'
        except TypeError: # NoneType
            return ''

似乎合法。

© www.soinside.com 2019 - 2024. All rights reserved.