[英]django queryset filter datetimefield
我正在使用django queryset API引用和基於DateTimeField的過濾器。
我在models.py中准備了以下模型:
class KleedkamerIndeling(models.Model):
gametimedate = models.DateTimeField(auto_now=False, auto_now_add=False) # date and time of game
hometeam = models.CharField(max_length=25, blank=True) # name of home playing team team
homedressroom = models.CharField(max_length=25, blank=True) # dressing room of home playing team
awayteam = models.CharField(max_length=25, blank=True) # name of visiting team team
awaydressroom = models.CharField(max_length=25, blank=True) # dressing room of visiting team team
pitch = models.CharField(max_length=25, blank=True) # name / number of playing pitch
referee = models.CharField(max_length=25, blank=True) # name of referee
refdressroom = models.CharField(max_length=25, blank=True) # name/number of referee dressroom
timestamp = models.DateField(auto_now_add=True, auto_now=False)
indelings_datum = models.DateField() # need to change to datum added later
def __unicode__(self):
return smart_unicode(self.hometeam)
我想根據當前日期訪問數據庫。 應該是這樣的:
queryset = KleedkamerIndeling.objects.all().filter(gametimedate=date.today())
這在我使用'datefield'之前有效,但我決定去datetimefield,因為我還需要玩游戲的開始時間。
我已經關閉了web和stackoverflow並找到了以下較舊的主題, 如何在Django中過濾DateTimeField的日期? 但我在實施方面蠢蠢欲動。
我想創建一個查詢集,獲取今天可用的所有'KleedkamerIndeling'。 隨后我想檢查列表中是否有超過10個對象。 如果是這種情況,我想根據當前時間進一步縮小范圍,也可以通過日期時間字段上的過濾器。 最后,我想對對象列表進行排序,以便按時排序。
我知道我的問題必須與datetimefield面包車的特性有關,我欣賞幾行代碼來幫助我前進。 我整個下午都試圖在python manage.py shell中找到正確的查詢....
我的模型大多數工作,因為queryset = KleedkamerIndeling.objects.all()似乎工作,我能夠從查詢集列表中為每個名為'game0到game10的對象設置單獨的列表。
我還有一個關於datetimefield格式的問題:
我已經定義了一個'KleedkamerIndeling'來描述一個從13:00開始的游戲。 我已經使用查詢集列表中的對象來定義10個不同的“游戲”對象。 即game0 = [queryset [0] .hometeam等...盡管game10如果適用的話。 游戲時間字段通過以下過濾器顯示在模板中:{{game0.0 | date:“H”}}:{{game0.0 | date:“i”}}。 在沒有game0對象的情況下,我仍然以':'結束。 我計划通過模板或視圖中的if else腳本來解決這個問題,還是有更好的方法來解決這個問題?
由於您使用的是datetime字段,因此您希望使用datetime對象進行查詢。 所以首先從最早到最晚排序查詢集,然后過濾掉今天沒有發生的事件。
from datetime import datetime, timedelta, time
today = datetime.now().date()
tomorrow = today + timedelta(1)
today_start = datetime.combine(today, time())
today_end = datetime.combine(tomorrow, time())
queryset = KleedkamerIndeling.objects.order_by('-gametimedate').filter(gametimedate__gte=today_start).filter(gametimedate__lt=today_end)
之后,我們可以檢查是否有超過10個對象,按當前時間過濾,並將查詢集限制為10個對象。
if queryset.count() > 10:
queryset = KleedkamerIndeling.objects.filter(gametimedate__gte=datetime.now())[:10]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.