[英]Django query that filters on calculated fields, searching for character within string
我有一個 django model 描述了兩個日期之間的循環狀態。 它看起來像:
class OnCallCycle(models.Model):
crew = models.ForeignKey(Crew, on_delete=models.CASCADE)
start = models.DateField()
end = models.DateField()
cycle = models.CharField(max_length=255)
其中start
和end
是循環的包含開始和結束日期, cycle
是一個字符串,表示每天使用一個字符的 on call 狀態循環。 例如,如果您有一個 12 天的周期,其中前 6 天開啟(由P
表示),最后 6 天關閉(由N
表示, cycle
看起來像: PPPPPPNNNNNN
。如果start
之間的天數和end
大於周期的長度,它會重復。因此,給定occ
實例 occ ,可以通過以下方式計算給定日期d
(已知在start
和end
之間)的 on call 狀態:
delta = (d-occ.start).days
status = occ.cycle[delta % len(occ.cycle)]
有沒有辦法在給定日期d
的查詢中執行此操作? 我想做這樣的事情:
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'
)
我正在為我的數據庫使用 Postgres,如果這有任何改變的話。 有什么想法嗎?
您可以使用正則表達式過濾器來獲取特定狀態。 表達式應該類似於^.{8}P
,其中 8 是 position,P 是您要查找的字母。
但是,我建議將狀態編碼為位。 正則表達式往往在數據庫提供者和版本之間有所不同,這使得它們變得古怪。 如果您決定使用這些位,請檢查: 如何在 Django 中執行 DB 按位查詢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.