我需要存储开始和结束日期以节省假期。 我不关心日期的一年,因为假期每年都会重复。
此外,我需要能够查询此日期以查看随机日期时间是否在范围内。即使我不希望存储多年,查询也必须明白假期可以在一年内开始,并在明年结束(即12月25日至1月4日)。
以前我将日期存储为DateTimeFields,然后迭代每个存储的假日并检查给定的目标日期是否在日期范围内。这是在Python中制作的,迫使我将QuerySets评估为列表,最后使用类似getattr(result, 'is_a_holiday', value)
由于出现了性能问题,我想将其转换为注释(因此我可以使用select_related和prefetch_related数据保留queryset)并使数据库(Postgresql)执行查询部分,但后来我遇到的问题是数据库考虑年份,因此在去年或明年的假期内不考虑今年假期内的日期。
我已经尝试了django-yearlessdate并使用条件表达式和F表达式进行注释(以检查一年何时更改)但是它没有按预期工作:当有几个假期时,某些条件情况不匹配,我只是得到默认的返回值。
这个问题有哪些其他/不同的方法?
答案 0 :(得分:0)
如果您不需要年份,可以在模型中创建两个单独的字段,分别保存月份和日期:
class Holiday(...):
month = models.PositiveSmallIntegerField()
day = models.PositiveSmallIntegerField()
然后要查找给定范围之间的假期,您可以这样做:
from_date = <datetime object>
to_date = <datetime object>
Holiday.objects.filter(month__range[from_date.month, to_date.month],
day__range[from_date.day, to_date.day]
)