0
我有了獨立的DateExpired和TimeExpired領域的典範:邏輯錯誤試圖篩選Django的查詢集爲Q對象
class Thing(models.Model):
name = models.CharField(max_length=50, unique=True)
date_expired = models.DateField(blank=True, null=True)
time_expired = models.TimeField(blank=True, null=True)
到期的工作原理一件事:
- 如果
date_expired
和time_expired
是null
:東西永不過期 - 如果
date_expired exists
,但time_expired爲null
:東西在日期後過期 - 如果
date_expired
和time_expired
存在:過期的東西在那一天, - 如果只有
time_expired
存在時間後:事情的時間(每天收盤後到期,所以會變得沒有在午夜再次到期時,時間= 00:00:00 )
我想得到一個包含所有未過期事物的查詢集。目前,我可以成功捕捉1,2和4,使用此代碼:
def not_expired(self):
qs_ = self.filter(Q(date_expired = None) | Q(date_expired__gte = datetime.now))
return qs.exclude(Q(date_expired = None) & Q(time_expired__lt = datetime.now))
,但我無法弄清楚如何添加要求#3。這是我有:
def not_expired(self):
qs = self.filter(Q(date_expired = None) | Q(date_expired__gte = datetime.now))
qs = qs.exclude(Q(date_expired = datetime.now) & Q(time_expired__gt = datetime.now))
return qs.exclude(Q(date_expired = None) & Q(time_expired__lt = datetime.now))
但是有什麼問題,因爲它沒有解決#3。