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方法中返回的)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DetailView是ASP.NET Web Forms的一种数据绑定控件,用于显示和编辑单个记录的详细信息。InsertCommand是其一个重要属性,它指定在DetailView控件插入新记录时执行的SQL语句或存储过程。 InsertCommand属性可以在设计时或运行时设置,其语法如下: ```C# <asp:DetailView ID="DetailView1" runat="server" InsertCommand="INSERT INTO TableName (Column1, Column2, ...) VALUES (@Column1, @Column2, ...)"> ... </asp:DetailView> ``` 其,TableName是要插入新记录的表名,Column1, Column2等是要插入的列名。在SQL语句,使用参数化查询可以防止SQL注入攻击,@Column1, @Column2等是参数名。 在运行时,可以通过代码设置InsertCommand属性,例如: ```C# protected void Page_Load(object sender, EventArgs e) { DetailView1.InsertCommand = "INSERT INTO TableName (Column1, Column2, ...) VALUES (@Column1, @Column2, ...)"; } ``` 需要注意的是,InsertCommand属性只有在DetailView控件的InsertItemTemplate包含可编辑控件时才会生效。例如: ```C# <asp:DetailView ID="DetailView1" runat="server" InsertCommand="INSERT INTO TableName (Column1, Column2, ...) VALUES (@Column1, @Column2, ...)"> <InsertItemTemplate> <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Column1") %>' /> <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Column2") %>' /> ... <asp:Button ID="InsertButton" runat="server" Text="Insert" CommandName="Insert" /> </InsertItemTemplate> </asp:DetailView> ``` 在InsertItemTemplate包含了要插入的列的可编辑控件,以及一个名为InsertButton的按钮。当用户单击InsertButton时,将触发插入操作并执行InsertCommand属性指定的SQL语句或存储过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值