Django查询会过滤计算所得的字段,在字符串中搜索字符

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

我有一个django模型,描述了两个日期之间的周期性状态。看起来像:

class OnCallCycle(models.Model):
    crew = models.ForeignKey(Crew, on_delete=models.CASCADE)
    start = models.DateField()
    end = models.DateField()
    cycle = models.CharField(max_length=255)

其中startend是周期的开始和结束日期,并且cycle是表示每天使用一个字符的呼叫状态周期的字符串。例如,如果您有一个12天的周期,其中前6天处于打开状态(以P表示),而后6天处于关闭状态(以N表示,则cycle看起来像:PPPPPPNNNNNN如果startend之间的天数大于周期的长度,则重复进行,因此,给定OnCallCycle实例occ,可以计算给定日期的通话状态[ C0](已知在dstart之间):

end

在给定日期delta = (d-occ.start).days status = occ.cycle[delta % len(occ.cycle)] 的查询中,有什么方法可以执行此操作?我想做这样的事情:

d

我正在将Postgres用于我的数据库,如果这有任何改变。有什么想法吗?

python django django-queryset
1个回答
0
投票

您可以使用正则表达式过滤器来获取特定状态。表达式应该类似于active_cycles = OnCallCycle.objects.filter( start__lte=d, end__gte=d ).filter( # Find all OnCallCycles where the cycle status for date d is not 'N' ) ,其中8是位置,P是您要查找的字母。

但是我建议将状态编码为比特。数据库提供程序和版本之间的正则表达式趋于不同,这使它们变得古怪。如果您决定使用这些位,请检查以下内容:^.{8}P

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