• 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的书籍
    
  • 相关阅读:
    MFC下拉框使用方法
    C++学习之路,漫长而遥远
    [转载]浅析STL allocator
    [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法
    回溯算法之n皇后问题
    算法练习之一
    Windows配置JDK and TOMCAT
    搭建openstack allinone版本
    在ms08_067_netapi中添加2003的Chinese版本
    msfvenom各平台木马生成
  • 原文地址:https://www.cnblogs.com/chmily/p/11746868.html
Copyright © 2020-2023  润新知