Django模型`get`不返回false

时间:2016-01-08 12:44:03

标签: python django django-views

我有一个Django应用程序,用于检查数据库是否包含与表单中用户输入的数字相匹配的数字。我设法让它重定向到“你赢了”#39;页面如果匹配,但当它们不匹配时,只会出现错误,说“匹配查询不存在。”#39;这是我在view.py文件中使用的if / else语句:

if Numbers.objects.get(numbers_win = user_number):
     return HttpResponseRedirect('win')
else:
     return HttpResponseRedirect('lose.html')

1 个答案:

答案 0 :(得分:3)

那是因为.get在没有匹配时抛出异常 - 它不会返回虚假的内容。

您有两种选择:

首先,您可以使用filterexists代替get,如果找到了某些内容,则会返回True,否则会返回False

如果你没有使用结果,这可能是最好的解决方案:

if Numbers.objects.filter(numbers_win = user_number).exists():
     return HttpResponseRedirect('win')
else:
     return HttpResponseRedirect('lose.html')

(如评论中所述,using exists is faster if you're just checking for existence

其次,您可以捕获异常,而不是使用if / else

try:
    Numbers.objects.get(numbers_win = user_number)
except Numbers. DoesNotExist:
    return HttpResponseRedirect('lose.html')
else:  
    return HttpResponseRedirect('win')

正如您所看到的,这会使代码变得有些尴尬,并且它的性能也比使用.exists差,所以您可能不应该这样做。