簡體   English   中英

django queryset過濾datetimefield

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

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