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