十.model高级用法:
10.1 ORM映射:
Object Relational Mapping:
orm映射的任务:
将list ,object 的操作转化为sql语句,根据对象生成数据表,将查询对象转换为对象和数据list
减少代码,重构,不需要因为数据库结构变化修改业务代码
模型类对应对应一张表,属性对应模型对应该模型对照表的对应的字段
10.2字段:Field高级用法:
AutoField一个自增整数类型字段,一个模型对照表只允许一个主键且自增字段必须为主键pk
BigAutoField(1.10新增)64位整数类型自增字段,范围更大:1~9223372036854775807
IntegerField 整数类型范围:-2147483648~2147483647
SmallIntegerField小整数,包含[-32768~32767]
BigIntegerField(64位整数字段):范围-9223372036854775808~9223372036854775807
PositiveIntegerField (正整数字段)范围:包含[0~214748364]
PositiveSmallIntegerField较小的正整数字段,从0到32767
BinaryField二进制数据类型,不能使用filter函数获得QuerySet
CharField字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值,即对模型和数据库层面生效又对前端生效
TextField大量文本内容,适用于前端TextArea 文本框控件:如果你为它设max_length只对前端输入字符数量限制,
不对数据库模型影响
时间字段:
1.TimeField 只作用于小时、分和秒,接收参数同DateField一样的参数HH:MM[:ss[.uuuuuu]]
2.DateFiled : DateField(auto_now=False, auto_now_add=False, **options),datetime.date的实例
3.DateTimeField日期时间类型。Python的datetime.datetime的实例,与DateField相比就是多了小H:M:S的显示
小数:
DecimalField固定精度的十进制小数,接收参数:
models.DecimalField(..., max_digits=5, decimal_places=2)。max_digits整数位数,
FloatField浮点数类型:
必填参数:max_digits,数字长度;decimal_places,有效位数。
GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)IPV4或者IPV6地址,字符串形式,例如192.0.2.30或者2a02:42fe::4
参数protocol默认值为‘both’,也可用‘IPv4’或者‘IPv6’,表示你的IP地址类型
NullBooleanField :支持null True, False
BooleanField :True ,False
URLField一个用于保存URL地址的字符串类型,默认最大长度200
UUIDField: 在PostgreSQL数据库中保存为uuid类型,其它数据库中为char(32)。这个字段是自增主键的最佳替代品
EmailField邮箱类型,默认max_length最大长度254位
SlugField:减号、下划线、字母、数字
ImageField:.height_field、width_field,提供这两个参数,则图片将按提供的高度和宽度规格保存
文件字段:
FileField: FileField(upload_to=None[, max_length=100, ** options]),
upload_to:一个用于保存上传文件的本地文件系统路径,该路径由 MEDIA_ROOT 中设置,
这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100
FilePathField:
FilePathField(path=None[, math=None, recursive=False, max_length=100, **options])
path:文件的绝对路径,必填
match:用于过滤路径下文件名的正则表达式,该表达式将用在文件名上(不包括路径
recursive:True 或 False,默认为 False,指定是否应包括所有子目录的路径
字段常用参数:
null=False数据库中允许此字段的值置为NULL,默认值是False
blank =False,允许为空什么都不填,默认False,null纯粹是与数据库有关系的。而blank是与页面必填项验证有关的
primary_key = False ,设置该属性为主键字段列
choices:CHIOCE_LIST=[('m','man),('f',woman)] choices:CHIOCE_LIST=[('m','man),('f',woman)]
max_length
default=默认值
verbose_name eignKey、ManyToManyField和OneToOneField需要通过Field.verbose_name才能自定义设置字段名
db_column="define_col_name" 数据库字段名称设置自定义别名
unique=True  表示此表该字段不允许重复
db_index = True  数据库创建索引
editable=True  admin里可编辑
error_messages=None  错误提示
help_text   提示信息
validators=[] 验证器
upload-to 文件上传后保存文件的具体路径 十一.Meta元属性,以及自定义模型管理类
11.1Meta 元属性:
db_table="app_grade" 表名称
ordering=["grade_id"] 查询排序规则支持多个字段进行先后顺序排列
自定义管理模型类:
第一步:继承Manager原始管理类
第二步: 重写get_queryset方法
class GradeManager(models.Manager):
"""重写get_queryset"""
def get_queryset(self):
return super(GradeManager,self).get_queryset().filter(grade_good=90) 11.2创建对象:
1.目的数据库添加数据
2.创建对象之前不会进行数据保存操作,只有在save()时才与数据库交互,将数据存储到数据库
3.创建对象的方法:
a.在模型类里面创建一个创建对象的类方法实现数据创建
b.在类对应的模型管理器中创建一个实例方法管理对象:
class StudentManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(k1=v1, k2=v2).order_by("column").values() class Student(models.Model):
mydef_obj=GradeManager()
# class.attr.func()
11.3数据查询和过滤器,排序
In [1]: from app.models import Grade
In [2]: Grade.mydef_obj.all()
<QuerySet [{'grade_id': 1004, 'grade_good': 8888, 'grade_bad': 88, 'is_delete': False}, {'grade_id': 1003, 'grade_good': 774, 'grade_bad': 4444, 'is_delete': False}, {'grade_id': 1002, 'grade_good': 90, 'grade_bad': 10, 'is_delete': False}, {'grade_id': 1001, 'grade_good': 80, 'grade_bad': 60, 'is_delete': False}]>
Out[2]: <QuerySet [{'grade_id': 1004, 'grade_good': 8888, 'grade_bad': 88, 'is_delete': False}, {'grade_id': 1003, 'grade_good': 774, 'grade_bad': 4444, 'is_delete': False}, {'grade_id': 1002, 'grade_good': 90, 'grade_bad': 10, 'is_delete': False}, {'grade_id': 1001, 'grade_good': 80, 'grade_bad': 60, 'is_delete': False}]> 相当于where 查询字段:方法filter <==> = ,exclude <==> != ,get 等等:
用法包括:
exact:精确匹配。区分大小写
Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)
iexact:不区分大小写的精确匹配
Entry.objects.filter(blog=b).delete()
Entry.objects.filter(pub_date__year=2010).update(comments_on=False)
exact like 区分大小写精确匹配查询相当于 =
contains ,icontains 包含 也是like 效果
startswith endswith ,istartswith iendswith
in
lt 小于 <
lte <=
gt >
gte >=
isnull isnotnull=True
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
外键字段查询,比较特殊查询需要属性名称_id查询
举例:
1.Student.mydef_obj.fliter(user_name__icontains="亚索")
2.Student.mydef_obj.get(stu_id__lt=1002)
3.Grade.mydef_obj.exclude(grade_id_id=1001) #外键 F,Q对象:
from django.db.models import Q F对象主要以用来比较字段A与字段B关系,Q对象用来进行或,与,非关系的判断
举例:
sql: select id from tb where startTime< endTime ;
F对象实现:Student.mydef_obj.filter(startTime__lt=F('endTime'))
Q对象:
sql: select id from tb where name='zh' and id ='1001';
Student.mydef_obj.filter(Q(name__exact='zh')& Q(startDate__lt=F('endDate')) Q(属性名__运算符=值) & Q(属性名__运算符=值) ==> and
Q(属性名__运算符=值) | Q(属性名__运算符=值) ==> or
~Q(属性名__运算符=值) ==> not
聚合函数:
使用aggregate()过滤器调用聚合函数,聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。
from django.db.models import Sum,Avg,Count,Max,Min
举例:
Grade_Info.objects.aggregate(Sum('server_id'))

  

django model 高级进阶的更多相关文章

  1. Django笔记 —— 模型高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  2. Django笔记 —— 模板高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  3. Django model select的各种用法详解

    <Django model update的各种用法介绍>文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用 ...

  4. Django Model基础操作

    关于设计django model django为我们集成了ORM对数据库进行操作,我们只需要进行定义model,django就会自动为我们创建表,以及表之间的关联关系 创建好一个django项目-首先 ...

  5. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  6. 【python】-- Django ORM(进阶)

    Django ORM(进阶) 上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作. 一.一对多:models.ForeignKey() 应用场景:当一张 ...

  7. Django (五) modeld进阶

    day 05 models进阶 1.models基本操作   django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框架里: 我们写的类表示数据库的表 ...

  8. Django model总结(上)

    Django model是django框架中处于比较核心的一个部位,准备分三个博客从不同的方面分别进行阐述,本文为<上篇>,主要对[a]Model的基本流程,比如它的创建,迁移等:默认行为 ...

  9. 【转】Django Model field reference学习总结

    Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...

随机推荐

  1. python爬取连续一字板股票及当时日期数据【原创分享】

    本篇为个人测试记录,记录爬取连续一字板的股票及当时日期. import tushare as ts import pandas as pd import time # 筛选一字板的策略 def gp_ ...

  2. centos7 防火墙的操作

    参考文章:http://blog.csdn.net/Joe68227597/article/details/75207859 http://www.cnblogs.com/cocoat/p/66054 ...

  3. 注册登录于一体的 用户登录注册界面(php)

    <!DOCTYPE HTML><html> <head> <script type="text/javascript" src=" ...

  4. C#中画三角形和填充三角形的简单实现

    C#中画三角形和填充三角形的简单实现: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graph ...

  5. java的并发

    问题: 过程: 正常流程:记录生成:状态=1-->北京:状态 = 3,4,-->定时任务:状态=5--->结束 异常流程:一条待处理的的记录生成以后,马上被定时任务处理,加载到内存, ...

  6. 第三十七篇 入门机器学习——Numpy基础

    No.1. 查看numpy版本 No.2. 为了方便使用numpy,在导入时顺便起个别名 No.3. numpy.array的基本操作:创建.查询.修改 No.4. 用dtype查看当前元素的数据类型 ...

  7. 快捷键(一):Win10

    Ctrl + X 剪切选定项 Ctrl + C(或 Ctrl + Insert) 复制选定项 Ctrl + V(或 Shift + Insert) 粘贴选定项 Ctrl + Z 撤消操作 Alt + ...

  8. python修改文件后缀名

    修改文件后缀名 # -*- coding: utf-8 -*- import os # # 列出当前目录下所有的文件 # filedir = 'C:\\Users\\WT\\Desktop\\test ...

  9. ansible playbook详解

    ansible playbook是由yml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法 语法 描述 缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs键 ...

  10. jumpserver 常见错误解决

    官方链接:https://jumpserver.readthedocs.io/zh/master/faq_install.html 重启jumpserver后台 #cd /opt#python3.6 ...