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中的数据


浙公网安备 33010602011771号