django queryset过滤器datetimefield

我在使用基于DateTimeField的过滤器来使用django queryset API参考。

我在我的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'之前就行得通,但我决定去日期时间场,因为我也需要游戏的开始时间。

我已经找到了Web和stackoverflow,并发现以下旧主题,我如何过滤Django中DateTimeField的日期? 但是我在实施过程中黯然失色。

我想创建一个查询集,以获取今天的所有'KleedkamerIndeling'。 随后我想检查列表中是否有多个对象。 如果是这种情况,我想根据当前时间进一步缩小范围,也可以通过datetimefield上的过滤器进行缩小。 最后,我想对对象列表进行排序,以便按时排序。

我知道我的问题必须做到这一点,datetimefield面包车的特点我欣赏一些代码行,以帮助我前进。 我一直在尝试在整个下午的python manage.py shell中查找正确的查询....

我的模型大部分工作是因为queryset = KleedkamerIndeling.objects.all()似乎有效,我可以从查询集列表中为每个名为'game0到game10'的对象设置单独列表。

我在datetimefield格式上有更多问题:

我已经定义了一个描述从13:00开始的游戏的'KleedkamerIndeling'。 我已经使用查询集列表中的对象来定义10个不同的'游戏'对象。 即game0 = [queryset [0] .hometeam等...虽然game10如果适用。 游戏时间字段通过如下过滤器显示在模板中:{{game0.0 | date:“H”}}:{{game0.0 | date:“i”}}。 在没有game0对象的情况下,我仍然以':'结尾。 我打算通过模板或视图中的if else脚本来解决这个问题,还是有更好的方法来解决这个问题?


由于您使用的是日期时间字段,因此您希望使用日期时间对象进行查询。 所以首先从最早到最新排列查询集,然后过滤掉今天不会发生的事件。

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]
链接地址: http://www.djcxy.com/p/38669.html

上一篇: django queryset filter datetimefield

下一篇: RuntimeWarning: DateTimeField received a naive datetime