25 Jul 18 批量导入 保持搜索 Q补充 GET/POST
Posted zhangyaqian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了25 Jul 18 批量导入 保持搜索 Q补充 GET/POST相关的知识,希望对你有一定的参考价值。
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请求
以上是关于25 Jul 18 批量导入 保持搜索 Q补充 GET/POST的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch中文档操作,索引导入数据批量导入删除文档
elasticsearch中文档操作,索引导入数据批量导入删除文档