queryset Querrydict字典的特性 三个知识点

 

 

 

 

 

 

 

通过看源码得知Querdict中有—mutable的字段设置

QueryDict就是存放  request.GET中的数据的字典

 

如何修改,让request.GET变成可修改属性

 

 如

  #处理筛选功能

    def get_filter_link_tags(self):
        list1 = []
        import copy
        #获取用户请求的请求头中的信息,进行深度拷贝
        params=copy.deepcopy(self.request.GET)
        #将_mutable的属性设置为True,即为可以改变的属性
        params._mutable=True
        for filter_field_name in self.list_filter:

            filter_field_obj=self.config.model._meta.get_field(filter_field_name)
            filter_field=Filter_Field(filter_field_name,filter_field_obj)
            # def inner(filter_field):
            filter_field_list=filter_field.get_data()
            list2 = []
            for field in filter_field_list:

                if isinstance(filter_field.filter_field_obj,ForeignKey) or 
             isinstance(filter_field.filter_field_obj,ManyToManyField):
#因为上边给params设置了可以修改的属性,所以可以在QueryDict字典中添加内容 #如用户选择了authors=2的这个属性, 那么 在每个a标签的href中都添加了这个字段, 即记录了上次的选则, # 可以通过此方法完成多条件筛选 params[filter_field.filter_field_name]=field.pk
  
                #正是因为设置了_mutable的属性 才可以给 params添加键值对等修改操作

 

 

 


list2.append(mark_safe('<a href="?%s">%s</a>'%(params.urlencode(),field))) elif filter_field.filter_field_obj.choices: params[filter_field.filter_field_name]=field[0] list2.append(mark_safe('<a href="?%s">%s</a>' % (params.urlencode(), field[1]))) else: continue list1.append(list2) print('list1----------------------',list1) return list1

 

 

 

 可以在POST请求中取出request.GET中的数据

 

posted on 2018-03-19 11:02  王大拿  阅读(591)  评论(0)    收藏  举报

导航