带有外键的Django筛选器查询
我想根据三个用户输入过滤查询。离开城市,到达城市和日期。出发城市和到达城市位于同一个名为Route的表中,而TravelDate是Route中的外键。 我的模型带有外键的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
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,我们将向用户显示信息。