• Django 易错易忘知识点


    Django框架学习易错和易忘点

    一、get在几处的用法

    1.获取前端数据

    request.POST.get('xxx')   #当存在多个值时,默认取列表最后一个元素;所以当存在多个值时,使用getlist
    

    2.获取数据库数据

    models.User.objects.get(xxx=yyy)   #get()方式返回的是单个对象,如果符合条件的对象有多个就会报错,所以我们一般用的是filter()
    

    二、路由层设置

    无名分组

    路由层:url(r'^index/(d+)/', views.index)   必须用括号,按位置参数传参
    视图层:视图函数必须要用一个参数来接收,参数名可以随便取,也可以用*args
    def index(request,xxx) 或者  def index(request,*args)
    

    有名分组

    路由层:url(r'^index/(?P<year>d+)/', views.index)  注意P要大写,按关键字传参给视图函数
    视图层:视图函数接收的参数名必须要和路由层传的参数名一致,或者用**kwargs接收多个参数
    def index(request,year)  或者   def index(request,**kwargs)
    

    F查询的本质就是从数据库中获取某个字段的值,之前查询等号后面的条件都是我们人为输入的,现在变成了需要从数据库中获取数据放在等号后面

    查询库存量大于卖出量的书籍

    from django.db.models import F
    res = models.Book.objects.filter(kucun__gt=F('maichu')) #kucun和maichu都是Book表的字段
    

    将书籍库存数全部增加1000

    models.Book.objects.update(kucun=F('kucun')+1000)
    

    把所有书名后面加上'新款'

    from django.db.models.functions import Concat
    from django.db.models import Value
    
    ret3 = models.Book.objects.update(title=Concat(F('title'), Value('新款')))
    models.Book.objects.update(title = F('title')+'新款')  # 不能这么写
    

    Q查询 (filter里面条件都是与,Q支持与或非)

    查询书籍名称是三国演义或者价格是444

    from django.db.models import Q
    res = models.Book.objects.filter(title='三国演义',price=444.44)  # filter只支持and关系
    res1 = models.Book.objects.filter(Q(title='三国演义'),Q(price=444))  # 如果用逗号 那么还是and关系
    res2 = models.Book.objects.filter(Q(title='三国演义')|Q(price=444))   #或者关系
    res3 = models.Book.objects.filter(~Q(title='三国演义')|Q(price=444))  #查询除了title是三国演义,或者价格是444的书籍
    
  • 相关阅读:
    C:表达式、语句、声明
    SAIO Swift All In One Diablo版 安装指南 Alpha
    Python自然语言处理学习笔记(60):7.1 信息抽取
    Python自然语言处理学习笔记(59):练习
    Python自然语言处理学习笔记(62):7.3 开发和评价分块器
    doctest模块的使用说明
    Python自然语言处理学习笔记(61):7.2 分块
    Python自然语言处理学习笔记(57):小结
    使用cURL操作Openstack对象存储的ReST API
    认证系统
  • 原文地址:https://www.cnblogs.com/chmily/p/11746868.html
Copyright © 2020-2023  润新知