簡體   English   中英

Django 查詢過濾計算字段,在字符串中搜索字符

[英]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)

其中startend是循環的包含開始和結束日期, cycle是一個字符串,表示每天使用一個字符的 on call 狀態循環。 例如,如果您有一個 12 天的周期,其中前 6 天開啟(由P表示),最后 6 天關閉(由N表示, cycle看起來像: PPPPPPNNNNNN 。如果start之間的天數和end大於周期的長度,它會重復。因此,給定occ實例 occ ,可以通過以下方式計算給定日期d (已知在startend之間)的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM