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的书籍

猜你喜欢

转载自www.cnblogs.com/chmily/p/11746868.html