2016-04-04 12 views
0

私は私のビューの1つに一致するテーブルを表示します。今ビューは、関数get_next_match()のクエリーセットからデータを取得します。問題は、クエリーセットがNoneであるというエラーが発生し続けることです。空のクエリセットを返すPython/Django

これをキャッチする最良の方法は、ページにエラーは発生せず、「データがありません」などの表示/印刷だけです。

これは、関数である:

try: 
    return Match.objects.filter(team_filter).filter(
     match_date__gt=current_match.match_date).order_by('match_date').first() 
except Match.DoesNotExist: 
    return Match.objects.none() 

例外: 例外値:

'NoneType' object has no attribute 'match_date' 
+2

ではなくなりますようにクエリセットのみ最初の項目を使用してことになるだろう。また場合。クエリ結果はどこで返されますか?完全なコードと完全なトレースバックを表示してください。 –

+0

あなたが正しいです、元のコードは返さMatch.objects.filter(.........)、これはいくつかのテストからでした。 'match_date__gt ....'行でまだエラーが発生しています。 – dnsko

+3

OKです。これは、 'current_match'がNoneであるためです。さて、最初に確認してください。 –

答えて

0

以外/試すの必要はありません。クエリーセットが空であるかどうかを確認してからクエリーセットの最初の項目にアクセスしようとすることができます。 ifステートメントのようなブール値コンテキストでクエリセットをテストする場合は、少なくとも1つの結果がある場合はTrueを返し、クエリセットが空の場合はFalseを返します。

matches = Match.objects.filter(team_filter)\ 
         .filter(match_date__gt=current_match.match_date)\ 
         .order_by('match_date') 

return matches.first() if matches else None 

だけにlimit the query to 1を覚えて、それは試しでずっとあなたが以外に返すefficent

+0

答えをありがとう。私はすでに問題が何かを知った。別の機能では、タイムゾーンで一致する日付をフィルタリングしていました。当時の現在の試合はなかったので、「None」を返していた。 – dnsko

関連する問題