社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django查询链接多个筛选器

Melissa Stewart • 5 年前 • 1862 次点击  

这是我的日程安排,

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
 
1862 次点击  
文章 [ 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)