代码之家  ›  专栏  ›  技术社区  ›  user2896120

处理两个对象不存在错误

  •  0
  • user2896120  · 技术社区  · 6 年前

    我有一个 get_context_data 我的功能 DetailView 在这个函数中,我尝试查询两个结果。但是,如果对象不存在,则会出现错误。如果两个对象都不存在,那么我会得到两个错误。我知道我可以尝试一下,但是如果两个条件都失败了,那么捕捉两个错误的更优雅的方法是什么?我知道我可以尝试两次,除了,但有没有更好的方法,特别是我可以使查询不返回不存在的对象,而是返回默认值?

    以下是我所拥有的:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Woody Johnson    6 年前

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

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

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

        2
  •  0
  •   Aqueous Carlos    6 年前

    您可以尝试以下代码,当 vote , context['voted'] context['follower'] 是空的。希望这能有所帮助。

    try:
        #do your stuffs
    
    except:
           vote = ""
           context['voted'] = ""
           context['follower'] = ""           
    
    return context