django_day11_项目相关
django_day11_项目相关
新增和编辑
路由
url(r'^category_add/$', views.category_change, name='category_add'),
url(r'^category_edit/(\d+)$', views.category_change, name='category_edit'),
视图
def category_change(request, pk=None):
obj = models.Category.objects.filter(pk=pk).first() # pk=None obj=>None
form_obj = CategoryForm(instance=obj)
if request.method == 'POST':
form_obj = CategoryForm(request.POST, instance=obj)
if form_obj.is_valid():
form_obj.save()
return redirect('category_list')
title = '编辑分类' if pk else '新增分类'
return render(request, 'form.html', {'form_obj': form_obj, 'title': title})
模板
{% extends 'dashboard.html' %}
{% block main %}
{{ title }}
{% endblock %}
q = Q()
# Q(Q(title__contains=query)|Q(detail__content__contains=query))
q.connector = 'OR'
q.children.append(Q(title__contains=query))
q.children.append(Q(detail__content__contains=query))
Q(title__contains=query) # Q(('title__contains',query))
def get_query(request, field_list):
# 传入一个列表['title','detail__content'] ,返回一Q对象
query = request.GET.get('query', '')
q = Q()
# Q(Q(title__contains=query)|Q(detail__content__contains=query))
q.connector = 'OR'
for field in field_list:
q.children.append(Q(('{}__contains'.format(field),query)))
# q.children.append(Q(detail__content__contains=query))
return q
解决分页保留查询参数的方法
from django.http.request import QueryDict
request.GET._mutable = True
request.GET['page'] = 1
request.GET.copy() # 返回一个可编辑的深拷贝
request.GET.urledncode() # page=1&aa=111