2017-02-04 4 views
0

私のサイトでは、javascriptカレンダーウィジェットを使用して開始日と終了日を入力できるページがあります。データベースに照会して結果を返します。ここに私の見解はDjango date__range query- add日付範囲が現在の日付で終わる場合は1日

class flagfilter(ListView, View): 
form_class = FlagReportForm 
template_name = 'free/flagreport.html' 
paginate_by = 20 

def get(self, request): 
    form = self.form_class(None) 
    return render(request, self.template_name, {'form': form}) 


def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 
     start_date = request.POST.get('start_date', '') 
     end_date = request.POST.get('end_date', '') 
     user = request.user 
     s = datetime.datetime.strptime(str(start_date), '%m/%d/%Y') 
     e = datetime.datetime.strptime(str(end_date), '%m/%d/%Y') 
     if e == s: 
      e = e + datetime.timedelta(days=2) 
     s_filtered = s.strftime('%Y-%m-%d') 
     e_filtered = e.strftime('%Y-%m-%d') 
     punch = Punch.objects.filter(date__range=[str(s_filtered),str(e_filtered)]).order_by('-date') 
     punches = punch.filter(user=user) 
     context = {'punches': punches} 
     return render(request, 'free/flagreport2.html', context) 

    return render(request, self.template_name, {'form': form}) 

である私の問題は、今日の日付に終了日付範囲を持っている場合、それは現在の日からオブジェクトを返す習慣です。私は、この行を追加:

 if e == s: 
     e = e + datetime.timedelta(days=2) 

あなたは現在の日付と開始日と終了日を持っている場合、それは今日のパンチオブジェクトを返さないので、私はこれをしました。これで問題は解決しましたが、まだ問題があります。開始日がの日付範囲を入力した場合は、先週末の週末とします。終了日は当日です。現在のパンチオブジェクトを返すことはまだありません。だから私はこのコードを、終了日が現在の日付かどうかをチェックし、もしそうなら、終了日に追加の日を追加するものに置き換えたいと思います。私はいくつかのことを試しましたが、動かすことはできません。どんな助けもありがとう!

答えて

0

私は、同じことが終了日として選択された日付に関係なく発生することに気付きました。終了日の結果は返されません。だから追加する

e = e + datetime.timedelta(days=) 

私の問題を修正する必要があります!

0

あなたが代わりにdate__rangeの

Punch.objects.filter(date__gte=s, date__lte=e).order_by('-date') 

を使用してみてください可能性があり、私はそれはあなたがのstrftimeと任意のはtimedeltaのものを使用する必要が保存すべきだと思う

編集:私は、Qも

を必要とされているとは思いません
+0

strmstimeのものは私のウィジェットのフォーマットをDjangoが好きなものに変換することです。しかし、今まで共有したコードは見たことがありません。私はそれについていくつかの読書をしなければならないでしょう! –

+0

gteとlte(より大きいか等しい/より小さい等しい)を使用して、date> = 2017-01-dataではなくdata> = 2017-01-01とdate <= 2017-01-30のクエリを使用します。 01と日付<2017-01-30。あなたが余分な日を追加することに対処する必要はありませんので、均等未満それを作る必要があります –

+0

情報ありがとう! –

関連する問題