三阶段day03-视图views之查询、表格一对一关联

day03

增删改查、模型定义与迁移、一对一关联

查询

    filter(条件): 查询满足条件的信息
        例如:模型名.objects.filter()
    exclude(条件): 过滤掉满足条件的信息
        例如:模型名.objects.exclude()
    count(条件): 计算个数
    exists(): 是否存在
        例如:模型名.objects.filter().exists()
    all(): 查询所有
        例如:模型名.objects.all()
    get(条件): 查询满足条件的唯一一个对象信息
        例如:模型名.objects.get()
    first(): 结果中的第一个
        例如:模型名.objects.filter().first()
    last(): 结果中的最后一个
        例如:模型名.objects.last()
    values(): 以键值对的形式获取对象信息
        例如:模型名.objects.filter().values()
    order_by(对象属性): 排序
        例如:模型名.objects.filter().order_by()

运算符

    模糊查询:contains,icontains,startwith,endwith
        例如:模型名.objects.filter(name__contains='小')
        例如:模型名.objects.filter(name__startwith='小')
        例如:模型名.objects.filter(name__endwith='小')
    大小于:gt,gte,lt,lte
        例如:模型名.objects.filter(age__gt=18)
    范围:in
        例如:模型名.objects.filter(id__in=[1,2,3,4,5])
    主键:pk
        例如:模型名.objects.filter(pk=...)

聚合aggragate

    from django.db.models import Max,Min,Avg,Count,Sum
    模型.objects.all().aggragate(Avg('age'))

F()/Q()

F():对字段进行计算
Q():与、或、非
 from django.db.models import Q,F
     stu1 = Student.objects.filter(Q(age=18),Q(gender=1))  并且
     stu2 = Student.objects.filter(Q(age=18)|Q(gender=1))  或
     stu3 = Student.objects.filter(Q(age=18)&Q(gender=1))  并且
     stu4 = Student.objects.filter(~Q(age=18))            非

     stu=Student.objects.filter(chinese__gt=F('math')+10).first()

模型一对一

定义一对一: OneToOneField()

    class A:
        b1 =  OneToOneField(B)
                
    class B():
        name = CharField()
        A与B通过b1关联起来
        正向查询,已知A对象a,查询B对象: a.b1
        stu = A.objects.filter(address='美国').first()
        stui=stu.b1.name

    反向查询,已知B对象b,查询A对象: b.a
        stu = B.objects.filter(name='小明').first()
        stui = stu.a.address

你可能感兴趣的:(三阶段day03-视图views之查询、表格一对一关联)