处理两个对象不存在错误

时间:2018-11-13 03:59:31

标签: python django

我的get_context_data有一个DetailView函数,在此函数中,我尝试查询两个结果。但是,如果对象不存在,则会收到错误消息。如果两个对象都不存在,则会出现两个错误。我知道我可以试一试,但是如果两个条件都失败怎么办,捕获这两个错误的更优雅的方式是什么?我知道我可以做两个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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可以尝试以下代码,当geomesavotecontext['voted']中的任何一个为空时,它都不会输出错误。希望这会有所帮助。

context['follower']