当前位置:  开发笔记 > 后端 > 正文

在不返回404的情况下验证django视图中是否存在对象的正确方法是什么?

如何解决《在不返回404的情况下验证django视图中是否存在对象的正确方法是什么?》经验,为你挑选了2个好方法。

我需要验证一个对象是否存在并返回该对象,然后根据该执行操作.在没有返回404的情况下,这样做的正确方法是什么?

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

if listing:

zzart.. 179

你也可以

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

有时使用try更清楚:除了:阻塞和其他时间单行存在()使代码看起来更清晰......所有这些都取决于你的应用程序逻辑.



1> zzart..:

你也可以

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

有时使用try更清楚:除了:阻塞和其他时间单行存在()使代码看起来更清晰......所有这些都取决于你的应用程序逻辑.


请注意,此解决方案仅在您不打算使用相关对象时才有效.否则(就像OPs情况一样)它是错误的并且比接受的解决方案慢很多:如果稍后执行`get()`,它将向数据库发送第二个查询.
.exists()更快:https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists
这是更好的方法,应该有答案
我假设`exists()`不能用`get()`,对吧?

2> ironfroggy..:

如果你没有给404,我不会使用404包装器.这是误用意图.只需抓住DoesNotExist即可.

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


如果你需要对对象做一些事情,这个解决方案比`exists()`更好.
我喜欢添加`values_list('id',flat = True)`。如果我只需要看看是否存在`listing = RealEstateListing.objects.values_list('id',flat = True).get(slug_url = slug)`
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有