DetailView中改变需要的queryset和object

本文详细介绍了如何通过登录状态获取用户特定poke并获取该poke下所有卡片的过程,包括使用queryset过滤、顺序获取及返回操作。

在上一篇中,获取到了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方法中返回的)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值