我需要验证一个对象是否存在并返回该对象,然后根据此执行操作。没有返回404的正确方法是什么?
try:
listing = RealEstateListing.objects.get(slug_url = slug)
except:
listing = None
if listing:
我需要验证一个对象是否存在并返回该对象,然后根据此执行操作。没有返回404的正确方法是什么?
try:
listing = RealEstateListing.objects.get(slug_url = slug)
except:
listing = None
if listing:
if not RealEstateListing.objects.filter(slug_url=slug).exists():
# do stuff...
有时候使用try: except:
块更加清晰,而其他情况下,一行代码的exists()
看起来更清晰...所有这些都取决于你的应用逻辑。exists()
方法不能与 get()
方法一起使用,对吗? - Eduard Lucaget()
操作,它将向数据库发送第二个查询。 - Chronialtry-except
而不是exists()
。 - Jithin Pavithran如果没有收到404,我不会使用404包装器,因为这是滥用意图。相反,只需捕获DoesNotExist异常即可。
try:
listing = RealEstateListing.objects.get(slug_url=slug)
except RealEstateListing.DoesNotExist:
listing = None
exists()
更好。 - SaeXvalues_list('id', flat=True)
。如果我只需要查看是否存在,则可以使用以下代码:listing = RealEstateListing.objects.values_list('id', flat=True).get(slug_url=slug)
。 - erajuanRealEstateListing.DoesNotExist
引用了模型本身,而不是对象本身。为什么不是 RealEstateListing.objects.get(slug_url=slug).DoesNotExist
呢? - Max Valleelisting = RealEstateListing.objects.filter(slug_url=slug).first()
if listing:
简单地测试存在性。 - Michael Hays.exists()
的解决方案了。我认为在SO上有多个不同的答案来解决问题是一个好主意。也许这对那些想要使用对象(如果存在)的人来说更好。我不会制定任何规则,以确定是否应避免使用try/except。有时候它很好用,有时候它不好用,例如,如果你只想编写非常紧凑的代码。 - Henrik Heinolisting = RealEstateListing.objects.filter(slug_url=slug)
if listing:
# do stuff
我认为不需要使用try/catch。如果结果中可能有多个对象,请像用户Henrik Heino所示使用first()。
if listing:
应该改为else:
。 - Chronial