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请求

原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180725.html