首页 > 解决方案 > 处理两个对象不存在错误

问题描述

我有一个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

标签: pythondjango

解决方案


使用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

如果只想获取过滤后的第一个对象,也可以试试

编辑:确保您的程序已准备好处理匿名用户和意外输入,以便过滤器可以正确获取它的值。


推荐阅读