python - 处理两个对象不存在错误
问题描述
我有一个get_context_data
函数DetailView
在这个函数里面,我尝试查询两个结果。但是,如果该对象不存在,那么我会收到错误消息。如果两个对象都不存在,那么我会收到两个错误。我知道我可以做一个 try-except,但是如果两个条件都失败了,那么捕获这两个错误的更优雅的方法是什么?我知道我可以做两个 try-except,但是有没有更好的方法专门让我可以做到这一点,以便查询不返回不存在的对象,而是返回默认值?
这是我所拥有的:
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
try:
vote = Voting.objects.filter(user_id=self.request.user,
choice__question=self.kwargs.get('pk'))
context['voted'] = vote[0].choice.id
context['follower'] =
.object.user.followers.get(follower=self.request.user)
except:
context['voted'] = 0
return context
解决方案
使用queryset.exists()
可以判断查询集是否为空。希望这会有所帮助。
if Voting.objects.filter(user_id=self.request.user,choice__question=self.kwargs.get('pk')).exists():
#do your stuffs
else:
#give it a default value
如果只想获取过滤后的第一个对象,也可以试试
.get()
: Django 的 .get().first()
:. Django 的 .first()
编辑:确保您的程序已准备好处理匿名用户和意外输入,以便过滤器可以正确获取它的值。
推荐阅读
- javascript - 我的 Javascript 函数如何更改 html 按钮的样式
- win32gui - 无法检索传递给 unicode 窗口的 wchar 文本
- ansible - 如何在比较并获得 Ansible Playbook 中的差异后删除配置
- javascript - Webpack processAssets 钩子和资源源
- java - 从对象打印数组的值
- node.js - 伙计们,我如何使用谷歌地理编码API来计算欧几里得距离?
- c# - 优化正则表达式并迭代正则表达式匹配组
- javascript - 将方法值传递给另一个组件
- json - 以 JSON 形式返回验证错误消息
- python-turtle - Python:“Turtle object has no attribute Turtle”错误似乎没有充分的理由