86

何かが表示されているかどうかを確認する必要Model.objects.filter(...)がありますが、何も挿入する必要はありません。これまでの私のコードは次のとおりです。

user_pass = log_in(request.POST)  # form class
if user_pass.is_valid():
    cleaned_info = user_pass.cleaned_data
    user_object = User.objects.filter(email = cleaned_info['username'])
4

6 に答える 6

74

filterを返すので、 countQuerySetを使用して返された結果の数を確認できます。これは、実際には結果が必要ないことを前提としています。

num_results = User.objects.filter(email = cleaned_info['username']).count()

ただし、ドキュメントを参照した後、後で結果を使用する予定がある場合は、フィルターで len を呼び出すことをお勧めします。SQL クエリは 1 つしか作成しないためです。

count() 呼び出しは、バックグラウンドで SELECT COUNT(*) を実行するため、すべてのレコードを Python オブジェクトにロードして結果に対して len() を呼び出すのではなく、常に count() を使用する必要があります (オブジェクトをロードする必要がない場合)。とにかくメモリに入れます。その場合、len() の方が高速になります)。

num_results = len(user_object)
于 2012-07-30T02:04:20.027 に答える
7

空のQuerySetのブール値もFalseであるため、次のこともできます...

...
if not user_object:
   do insert or whatever etc.
于 2012-07-30T04:06:01.153 に答える
6

get_object_or_404()を使用することもできHttp404ます。オブジェクトが見つからなかった場合は aが発生します。

user_pass = log_in(request.POST) #form class
if user_pass.is_valid():
    cleaned_info = user_pass.cleaned_data
    user_object = get_object_or_404(User, email=cleaned_info['username'])
    # User object found, you are good to go!
    ...
于 2012-07-30T02:11:29.133 に答える
4

以下を使用できます。

try:
   # get your models
except ObjectDoesNotExist:
   # do something
于 2015-10-01T09:50:24.700 に答える