if语句中不存在行进查询

时间:2014-05-04 18:55:43

标签: python django get match

好好回答这个问题。我提出这个问题:

Puntuaciones.objects.filter(bar__id=b).get(usuario=v.usuario2)

这很完美,但是当我把它放在if语句中时,就像这样:

if(Puntuaciones.objects.filter(bar__id=b).get(usuario=v.usuario2)):

我有一个问题,当查询返回一个对象Puntuaciones我没有任何问题,但是当没有结果时它会抛出我:

Exception Value: Puntuaciones matching query does not exist.

所以我的问题是,如果此查询可能不成功,我如何为查询执行if语句。

我尝试用Q对象,使用exists()(这只适用于查询集...我不知道如何使它工作。有什么建议吗?谢谢

2 个答案:

答案 0 :(得分:0)

get()要么返回一个对象,要么抛出ObjectDoesNotExist异常,在try/except的帮助下抓住它:

try:
    Puntuaciones.objects.filter(bar__id=b).get(usuario=v.usuario2)
    # do something if object was found
except Puntuaciones.DoesNotExist:
    # do smth if nothing found

另一种选择是使用exists()

if Puntuaciones.objects.filter(bar__id=b, usuario=v.usuario2).exists():
   # do something if object was found

答案 1 :(得分:0)

我建议尝试:除了:对。这样,当触发异常时,您将在适当的位置执行代码。请注意,您确实应该在设置中使用正确的异常类型。请注意,如果要跳过except中的处理,则需要输入显式传递(python noop)语句。否则你会收到缩进错误。

try:
  if(Puntuaciones.objects.filter(bar__id=b).get(usuario=v.usuario2)):
    # put code in here
    pass # dummy statement to be replaced by actual code.
except:
  # Put exception code here.
  pass