Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有外键的Django筛选器查询_Django_Django Models_Django Views - Fatal编程技术网

带有外键的Django筛选器查询

带有外键的Django筛选器查询,django,django-models,django-views,Django,Django Models,Django Views,我想根据三个用户输入过滤查询。离开城市,到达城市和日期。出发城市和到达城市位于同一个名为Route的表中,而TravelDate是Route中的外键。 我的模型 class TravelDate(models.Model): start_date = models.DateField(null = True) interval = models.IntegerField(null = True) class Route(models.Model): depar

我想根据三个用户输入过滤查询。离开城市,到达城市和日期。出发城市和到达城市位于同一个名为Route的表中,而TravelDate是Route中的外键。 我的模型

 class TravelDate(models.Model):
    start_date = models.DateField(null = True)
    interval = models.IntegerField(null = True) 



class Route(models.Model): 
    depart_city = models.CharField(max_length=50, null=True, blank=False)
    arrive_city = models.CharField(max_length=50, null=True, blank=False)
    driver = models.ForeignKey(Driver)
    schedule = models.ForeignKey(Schedule)
    traveldate = models.ForeignKey(TravelDate)
我的看法

def newpage(request):
    if 'origin' in request.GET and request.GET['origin']:
        q = request.GET['origin']
        c = request.GET['dest']
        d = request.GET['travelDate']

        results = Route.objects.filter(depart_city=q, arrive_city=c)

        return render(request,'busapp/newpage.html', {'results': results})
    else:
        return render(request, 'busapp/newpage.html',{})
在视图中,我如何进行一个查询,根据用户输入的信息过滤这些路线的出发城市、到达城市和旅行日期。如果在该日期有从a市到B市的公交车可用,将通过执行以下操作来计算
如果(d-TravelDate.start\u date)%TravelDate.interval=0
,则将结果显示给用户


我做不好。我是Django的新手,正在努力学习

将间隔保留为整数字段

views.py

    from datetime import datetime, timedelta

    q = request.GET['origin']
    c = request.GET['dest']
    d = request.GET['travelDate']
    # d format is '20171122',convert str to date
    start_date = datetime.strptime(d, "%Y%m%d").date()
    results = Route.objects.filter(depart_city=q, arrive_city=c)
    routes = []
    for route in results:
        if (start_date > date) and ((start_date - route.traveldate.start_date) % timedelta(days=route.traveldate.interva)) == timedelta(days=0):
            routes.append(route)
    return render(request,'busapp/newpage.html', {'results': routes})

谢谢你的快速回复。我不确定为什么会出现此错误:如果(d-route.traveldate.start_date)%route.traveldate.interval==0:TypeError:unicode和datetime.date的操作数类型不受支持您应该使用timedelta来计算路由是否是您想要的,那么间隔的单位是什么?间隔是指公共汽车走这条路线的频率。因此,1表示自任何(日期-开始日期)%1=0起,公共汽车每天都按该路线行驶。2表示每隔一天。我是python/Django新手,不知道什么是timedelta,但我现在会查找它,看看我如何使用它。您的开始日期表示路线从那天起在线提供,间隔1表示每天1辆公交车,间隔2表示两天1辆公交车?是的,开始日期表示路线从那天起在线提供。间隔1表示公共汽车每天从A点开到B点。间隔2意味着公共汽车每隔一天从A点开到B点。假设用户选择2017年11月26日作为出行日期,我从2017年11月20日起就在线注册了公交车。然后,我们使用if(travelDate-start_date)%2=0向用户显示公交车信息(时间、司机…)。因此,如果我们有((2017-11-26)-(2017-11-20))%2将给我们0,我们将向用户显示信息。