Django中Models基础字段解义及样例

jango Model字段类型及字段参数

模型中最重要且唯一必要的是数据库的字段定义,字段在类属性中定义,并且每一个字段都应该是某个Field类的实例。

常用字段类型

DecimalField():小数必须给定2个参数max_digits(最大长度), decimal_places(保留小数位数)
AutoField():一个IntegerField,根据可用ID自动递增。如果没指定主键,就创建它自动设置为主键。
BooleanField:             布尔类型字段
CharField:                字符串类型字段
DateField:                日期字段
DateTimeField:            日期时间字段
EmailField:Email:        字段
FileField:                文件字段
FloatField:              (浮点数)小数字段
ImageField:               图片字段
IntegerField:             整数字段
IPAddressField:           IP字段
SmallIntegerField:        小整数字段
TextField:                文本字段
URLField:                 网址地址字段

字段参数
ForeignKey.on_delete:当ForeignKey删除引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为 。

CASCADE,           删除引用的对象时,也删除引用它的对象;
PROTECT,           通过抛出异常来禁止删除引用的对象;
OneToOneField(to, on_delete, parent_link = False):一对一
ForeignKey(to, on_delete):一对多
ManyToManyField(to):多对多
SET_NULL,           将引用设置为NULL,只有在null为True的情况下。
SET_DEFAULT,       设置默认值,ForeignKey必须设置默认值。
SET(...),           设置给定值。
DO_NOTHING,        不采取行动。如果数据库后端强制引用完整性,这将导致完整性错误,
除非手动向数据库字段添加
SQL on delete约束

Meta()

abstract          如果abstract=True,那么model为抽象基类;
app_label         在其他地方写了一个模型类,而这个模型类是属于myapp的,那么需要指定app_label='myapp'
db_table          用于指定自定义数据库表名的;
get_latest_by     由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果你的数据模型中有 DateField 或 DateTimeField 类型的字段,你可以通过这个选项来指定lastest()是按照哪个字段进行选取的。
managed           由于Django会自动根据模型类生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。
ordering          这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。加负号为反序ordering = ['-create_time']
permissions       创建此对象时进入权限表的额外权限。 指定了一个附加权限: can_deliver_pizzas permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)这是一个2-元素 tuple 的tuple或列表, 其中两2-元素 tuple 的格式为:(permission_code, human_readable_permission_name)。
unique_together   一起使用的字段名称集必须是唯一的,这是一个列表,这些列表在一起考虑时必须是唯一的  unique_together = [['driver', 'restaurant']]
verbose_name      给model类起一个更可读的名字:
verbose_name_plural   model的复数名称

QuerySet API方法

字段查询:字段查找是指定SQL WHERE子句的内容的方式。它们被指定为QuerySet方法的关键字参数;通过给定的限制条件查找出相对应子集。

 普通查询
in:在给定的可迭代对象中
gt, gte, lt, lte:         大于,大于或等于,小于,小于或等于
range:                    给定对象范围内
isnull:                   是否为空
exact, iexact:            完全符合
contains, icontains:      包含匹配
startswith, istartswith:  开头
endswith, iendswith:      结尾
regex, iregex:            正则表达式
field 查询

聚合查询
Aggregate(*expressions, output_field = None, distinct = False, filter = None, ** extra)
聚合表达式是Func()表达式的一种特殊情况,查询需要一个聚合函数
Avg():返回给定表达式的平均值
Count():返回给定表达式的总计数
Max():返回给定表达式的最大值
Min():返回给定表达式的最小值
Sum():计算给定表达式的所有值的总和

常用查询实例:

常用查询
School.objects.all()  #查询School表中所有数据
School.objects.get(school_name='北京大学')  #查询School表中学校名字为北京大学的数据
School.objects.filter(city='beijing')  #查询School表中city字段为beijing的数据
School.objects.exclude(city='beijing')  #查询city=beijing的数据
School.objects.filter(pk=1).values()  #查询pk=1的值
School.objects.values('city').distinct()  #去重
School.objects.order_by('pass_line')  # 排序,默认升序
School.objects.order_by('pass_line').reverse()#排序并使用reverse()进行翻转操作
School.objects.count()  #查询数据总数,默认id
School.objects.filter(city='beijing').first()  #查询city为beijing的第一个数据
School.objects.filter(city='beijing').last()  #查询city为beijing的最后一个数据
School.objects.filter(pass_line__gt=500).exists()  #查询是否存在pass_line高于500的数据,Ture
School.objects.filter(pass_line__gt=700).exists()  #查询是否存在pass_line高于700的数据 False

聚合查询
from django.db.models import Avg, Count, Max, Min, Sum

Student.objects.aggregate(Avg('score'))  #{'score__avg': 618.0}
Student.objects.aggregate(Count('score'))  #{'score__count': 3}
Student.objects.count()  #3
Student.objects.aggregate(Max('score'))  #{'score__max': 666}
Student.objects.aggregate(min_value=Min('score'))  #{'min_value': 560}
Student.objects.aggregate(sums=Sum('score'))  #{'sums': 1854}

猜你喜欢

转载自blog.csdn.net/qq_40267002/article/details/120569156
今日推荐