2017-11-22 14 views
1

3人のユーザ入力に基づいてクエリをフィルタリングしたい。都市出発、到着都市および日付。 Depart CityとArrive cityはRouteと同じテーブルにあり、TravelDateはRouteの外部キーです。 私のモデルのビューで外部キーを使用したDjangoフィルタクエリ

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',{}) 

は、どのように私は、ユーザーinputedに基づいdepart_city、arrive_city、およびそれらのルートのTravelDateをフィルタします1つのクエリを行うことができます。その都市のA市からB市にバスがある場合は、if (d - TravelDate.start_date)% TravelDate.interval =0のような処理をして計算し、その結果をユーザーに表示します。

私はこの権利を得ることができません。私はDjangoには新しく、学びたいと思っています。

答えて

1

はIntegerFieldと

迅速な返信用

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}) 
+0

おかげと間隔をおいてください。なぜこのエラーが出るのか分かりません:if(d - route.traveldate.start_date)%route.traveldate.interval == 0: TypeError:サポートされていないオペランドタイプが ':unicode'と ' datetime.date – Florian

+0

あなたは、ルートがあなたの欲しいものかどうかを計算するためにtimedeltaを使用する必要があります。したがって、区間の単位は何ですか? – Ykh

+0

回答の更新を参照してください – Ykh

関連する問題