Py学习  »  Django

Django查询链接多个筛选器

Melissa Stewart • 5 年前 • 1859 次点击  

这是我的日程安排,

class Schedule(Base):
    tournament = models.ForeignKey(Tournament, on_delete=models.CASCADE, null=True)
    first_team = models.ForeignKey(Team, related_name="first_team", on_delete=models.CASCADE, null=True)
    second_team = models.ForeignKey(Team, related_name="second_team", on_delete=models.CASCADE, null=True)
    first_score = models.IntegerField(default=0, null=True)
    second_score = models.IntegerField(default=0, null=True)
    sport = models.ForeignKey(Sport, on_delete=models.CASCADE, null=True)
    date = models.DateTimeField()

比赛的天数,除了0.0偏差。

schedules = Schedule.objects.filter(sport=sport).filter(date__gte=date.today()).filter(
                        date__lte=(date.today() + timedelta(days=30))).order_by("date").exclude(tournament__bias=0.0)

这不管用,有人能帮我吗。谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53579
 
1859 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Ralf
Reply   •   1 楼
Ralf    6 年前

tz.now() 而不是 date.today() USE_TZ = True (默认值)。 见 django docs .

import datetime
from django.utils import timezone as tz

today = tz.localtime(tz.now()).date()
start_date = today - datetime.timedelta(days=30)
end_date = today

schedules = Schedule.objects.exclude(tournament__bias=0.0) \
    .filter(sport=sport, date__gte=start_date, date__lte=end_date) \
    .order_by("date")
dirkgroten
Reply   •   2 楼
dirkgroten    6 年前

您的代码是正确的过滤方式(尽管您可以将两者合并 filter()

问题可能是您现在正在筛选:

today() <= date <= today() + 30 days 

因此,如果您没有任何日期在未来30天(或今天)的实例,您将得到一个空集。

Shakil
Reply   •   3 楼
Shakil    6 年前

你的链接过滤器看起来几乎是正确的,但我猜你搞乱了过去30天的部分过滤。

schedules = Schedule.objects.filter(sport=sport).filter(date__lt=date.today()).filter(
                        date__gte=(date.today() - timedelta(days=30))).order_by("date").exclude(tournament__bias=0.0)