DetailView中改变需要的queryset和object

在上一篇中,获取到了url中传入的DI为x的poke的第y个card,这里,我们需要返回登陆用户的第x个poke以及该poke下所有的card


get_object中,获取的object是使用某个queryset,我们传入一个queryset或者使用get_queryset方法返回的queryset,的filter方法来获取特定的object的,我们首先限制queryset

get_queryset方法中,有:


      def get_queryset(self):
          return Poke.objects.filter(pokeuser=self.request.user).order_by('-score')


这里,我们就先获取了登陆状态下的用户的所有poke记录,在get_object方法中,我们有


      def get_object(self,queryset=None):
          num=int(self.kwargs.get(self.pk_url_kwarg,None))
          query=self.get_queryset()
          try:
              obj=query[num-1]
          except IndexErrort:
              raise Http404
          return obj


这里,我们就返回了某个poke记录

这样~最后,我们在get_context_data方法里面获取对应的poke的所有的card记录


      def get_context_data(self,**kwargs):
          context=super(PokeInfo,self).get_context_data(**kwargs)
          context['cards']=self.object.cards.all()
          return context


注意的是,context=super(PokeInfo,self).get_context_data(**kwargs)这个就是调用父类的get_context_data方法,它会将我们get_object方法返回的obj存储到context中,并且,对应的名字就是我们在类中设置的属性,比如

context_object_name='information'

则有

context[‘information’]=obj(obj是我们在get_object方法中返回的)




你可能感兴趣的:(python,django)