zoukankan      html  css  js  c++  java
  • 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请求

  • 相关阅读:
    P2403 [SDOI2010]所驼门王的宝藏
    差分约束系统
    题解报告——运输计划
    差分与树上差分
    题解报告——天使玩偶
    题解报告——Mokia
    CDQ分治&整体二分(未完待续)
    点分治
    AC自动机
    树链剖分
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180725.html
Copyright © 2011-2022 走看看