# QueryDict正常是不允许修改的,要想往里面添加内容,需要另mutable=True
dic = request.GET
print(dic) # <QueryDict: { ‘query‘ : [‘12‘]}>
dic._mutable=True # 这种的需要加上下划线
dic[‘key‘] = value # 这样才可以添加
# 还可以直接实例化,当参数传过去的时候
from django.http.request import QueryDict
class Base:
def __init__(self, params=None)
self.params = QueryDict(mutable=True) # 这种也是让它可以修改
还可以实参是request.GET.copy() # 这是深copy并且可修改
# 当我们需要拿到QueryDict中的数据的时候可以直接dic.urlencode()
print(dic.urlencode()) #query=12
比如说我们在淘宝首页在没有登录的情况下点击‘我的订单‘,他会让你先去登录,登陆完直接就跳转到‘我的订单‘ ,这里其实就用到了路径拼接的功能
我们要想做路径拼接跳转需要借助于自定义过滤器来做
from django import template
from django.urls import reverse
from django.http.request import QueryDict
register = template.Library()
# 用这个的原因是可以传多个参数
@register.simple_tag
def reverse_url(request, url_name, *args, **kwargs ):
next = request.get_full_path() # 拿到的是带参数的路径
qd = QueryDict(mutable=True)
qd[‘next‘] = next
base_url = reverse(url_name, args=args, kwargs=kwargs)
# next=/crm/customer_list/?query=in&page=2 如果不urlencode 这个&之后的东西会被分割这样就会丢参数
# urlencode之后 next=%2Fcrm%2Fcustomer_list%2F%3Fquery%3Din%26page%3D2
# 虽然转换了,但是你去get的时候自己还会变回来的
return ‘%s?%s‘ % (base_url, qd.urlencode())
下面来看看怎么用
1 . 模糊搜索肯定是要用到上面的request.GET.copy()的,因为我们如果不用会出现条件缺失的情况, 见下图
2. 我们在进行模糊搜索的时候需要用到Q查询
原文:https://www.cnblogs.com/attila/p/10549076.html