class Class(models.Model):
"""班级表"""
class_name = models.IntegerField() # 班级名称
class_grade = models.IntegerField() # 班级年纪
boy_num = models.IntegerField() # 男生人数
girl_num = models.IntegerField() # 女生人数
""""""""""""""""""""""""""""""""""""""""""""""""""""""""
from django.db.models import Q,F
""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Django中的F查询可在查询中引用同一模型的其他字段。
Class.objects.filter(boy_num__ge = F('girl_num'))用于筛选男生多于女生的班级
F可以帮我们取到表中某个字段对应的值来当作我的筛选条件,而不是自定义常量的条件了,实现了动态比较的效果
Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。基于此可以对表中的数值类型进行数学运算
例如:将所有男生人数多于女生人数的班级中男生人数减10:
Class.objects.filter(boy_num__ge = F('girl_num')).update(boy_num = F('boy_num') - 10)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Django中的filter语句用逗号隔开的条件是与的意思,若需要执行更复杂的查询语句,如(or语句),则可以使用Q查询
例如:查询某个班级男生人数大于20或女生人数小于20
Class.objects.filter(Q(boy_num__gt = 20) | Q(girl_num_lt = 20))
查询男生人数大于20并且女生人数不小于20人的班级
不使用Q查询:Class.objects.filter(boy_num__gt = 20,girl_num__lt =20 )
使用Q查询:Class.objects.filter(Q(boy_num__gt = 20)&~Q(girl_num__lt =20))
混合使用:Class.objects.filter(Q(boy_num__gt = 20), girl_num__lt =20)
Q查询中:| 代表或操作,& 代表与操作,~ 代表非操作。
查询参数可以混合使用Q对象与关键字参数,所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。
defer('id','name'):取出对象,字段除了id和name都有
only('id','name'):取的对象,只有id和name
如果点,依然能点出其它列,但是不要点了,因为取没有的列,会再次查询数据库
class User(models.Model):
name = models.CharField(max_length=32)
password = MyCharField(max_length=32)
choices = ((1,'重点大学'),(2,'普通本科'),(3,'专科'),(4,'其他'))
education = models.IntegerField(choices=choices)
user_obj.education # 拿到的是数字
user_obj.get_education_display() # 固定用法 获取choice字段对应的注释
get_field_display()