25 Jul 18
一、批量导入
book_list=[]
for i in range(1,101):
book=Book(title="book_%s"%i,price=i*i)
book_list.append(book)
Book.objects.bulk_create(book_list)
二、保持搜索的实现(分页,filter)
1. request.GET得到的字典不能修改,但可以对其深拷贝的字典对象进行修改
import copy
self.params = copy.deepcopy(self.request.GET) # # <QueryDict: {'a': ['1'], 'b': ['2'], 'xxx': [123]}>
self.params["page"] = i
2. self.request.GET.urlencode(); self.params.urlencode() # "a=1&b=2&xxx=123"
三、Q用法补充
from django.db.models import Q
from app01.models import Book
Book.objects.filter(title="西") # <QuerySet []>
Book.objects.filter(title="西游记") # <QuerySet [<Book: 西游记>]>
Book.objects.filter(Q(title="西游记")|Q(price=45)) # <QuerySet [<Book: 西游记>, <Book: 水浒传>]>
但经常,待筛选的对象会以字符串的形式传入,以上方法即失效;以下方法,可把字符串当作对象,从而进行进一步筛选
from django.db.models import Q
q=Q()
q.children.append(("title","西游记"))
q.children.append(("title"+"__icontains","西")) # 常见用法
q.children.append(("",""))
q.connector="or" # 默认是'and',如果需要或关系,需要将connector设置成"or"
Book.objects.filter(q)
# 实例
>>> q=Q()
>>> q.children.append(("title","西游记"))
>>> Book.objects.filter(q)
<QuerySet [<Book: 西游记>]>
>>> q.children.append(("price",234))
>>> Book.objects.filter(q)
<QuerySet []>
>>> q.connector="or"
>>> Book.objects.filter(q)
<QuerySet [<Book: 西游记>, <Book: 张曌和吴晨钰的故事>]>
四、若需要修改数据库用POST请求,若不需要修改数据库用GET请求