1.设置前端免校验的关键字novalidate
2.数据库字段样式是checkbox的时候要修改样式和'__all__'的使用
3.instance关键字高效实现修改功能
4.正则添加 url,再次注意
5.form-inline 约束 form-control 的大小
6.模糊查询
step1:定制查询方法,这个方法将前台穿的关键字拼接,并return一个返回值
step2:在请求里面调用方法,根据业务传入对应字段列表,将返回值(查询语句)放入filter
代码语言:javascript复制class CustomerList(View):
def get(self, request):
print('当前用户{}'.format(self.request.user))
q = self.search_condition(['qq', 'name', 'last_consult_date']) # 做查询使用
if request.path_info == reverse('crm:customer_list'):
all_customer = models.Customer.objects.filter(q, consultant=None) # 默认展示公户
else:
all_customer = models.Customer.objects.filter(q, consultant=request.user) # 默认展示公户
"""
<QueryDict: {'query': ['alex']}>
将查询参数复制一份, 传入分页
"""
query_params = request.GET.copy()
pag_obj = Pagination(request, len(all_customer, ), query_params=query_params, each_page_show_number=2)
return render(request, 'crm/costumer_list.html',
# 分页
{'all_customer': all_customer[pag_obj.each_page_start_number:pag_obj.each_page_end_number],
'page_html': pag_obj.html_str
})
# 定制自己的查询
def search_condition(self, query_list): # 参数接收一个查询列表,只要在列表里面的都被查询
query = self.request.GET.get('query', '') # 从form 表单里面找到 query 关键字
print('本次搜索关键字是{}'.format(query))
query_obj = Q() # 生成 Q 对象
query_obj.connector = 'OR' # or 或的连接关系
for i in query_list:
query_obj.children.append(Q(('{}__contains'.format(i), query))) # 固定格式
return query_obj
# 实际的拼接效果如下,是查询的另一种写法.
# Q(('qq__contains', query)) | Q(('name__contains', query))
# 这是传统的写法
# Q( Q(qq__contains=query) | Q(name__contains=query) )
7.分页查询时候保留筛选条件
step1:copy方法,传入Pagination类里面
step2:初始化属性(这个就不说了),设置_mutable=True
step3:实现
今天我感觉已经快要gg了,我是不是不行了,头眼昏花...