97

我需要验证对象是否存在并返回该对象,然后根据该对象执行操作。不返回 404 的正确方法是什么?

try:
    listing = RealEstateListing.objects.get(slug_url = slug)
except:
    listing = None

if listing:
4

4 回答 4

216

你也可以这样做:

if not RealEstateListing.objects.filter(slug_url=slug).exists():
    # do stuff...

有时使用块更清晰,try: except:有时单行使exists()代码看起来更清晰......这一切都取决于您的应用程序逻辑。

于 2011-12-16T19:10:18.393 回答
126

如果您没有获得 404,我不会使用 404 包装器。这是对意图的滥用。相反,只需抓住DoesNotExist。

try:
    listing = RealEstateListing.objects.get(slug_url=slug)
except RealEstateListing.DoesNotExist:
    listing = None
于 2009-03-12T19:24:12.187 回答
9
listing = RealEstateListing.objects.filter(slug_url=slug).first() 
于 2017-04-12T13:06:18.820 回答
0

我会这样做很简单,如下所示:

listing = RealEstateListing.objects.filter(slug_url=slug)
if listing:
    # do stuff

我认为不需要尝试/捕获。如果结果中可能有多个对象,则使用 first() 如用户 Henrik Heino 所示

于 2020-01-22T09:50:56.070 回答