【二】Django - v 2.2 Models层

7 篇文章 0 订阅
1 篇文章 0 订阅

Models层

模型类

继承自 django.db.models.Model
每个类属性,表现一个数据字段
嵌套Meta声明更多选项

字段类型

【通用属性】

字段选项说明
null=True/False字段是否可以为NULL,允许数据库存储值为null数据
blank=True/False是否允许空字符,该字段主要用在表单验证时使用,默认情况下blank为False 。如果数据库存储允许为null时,blank也必须设置为True(不然无法通过表单验证)
choices=序列选项列表,官方说明直达入口 choice可以是一个二元元组,也可以二元元组套二元元组
verbose_name设置便于人类阅读的名称
db_column数据列名, 未设置的情况下使用字段名作为列名
db_index是否为索引
default给字段设置默认值,可以是一个值也可以时一个可调用对象(但不能使用lambda表达式)
unique是否唯一
unique_for_date组合唯一 官方说明直达 。 【个人感觉】在Meta中设置更方便:class Meta: unique_togther = [字段1 , 字段2]
primary_key主键
error_messages错误消息,这个选项可以重写默认的消息提示
validators验证分内置验证和自定义验证,验证器既可以用在model层也可以用在form层。验证器会单独讲解。迫不及待的小伙伴可以 点击直达官方文档

⚠️注:字段类型的不详之处可直接查看官方文档

【 字段类型 】

字段选项说明
AutoField整型自增长主键字段
BigAutoField2的64次方的长度, 1 to 9223372036854775807.
UUIDField全局唯一标识符字段
BigIntegerField-9223372036854775807 to 9223372036854775807.

【文本】

字段选项说明
CharField()字符字段,max_legth是必选参数。如果是大段文本,可使用TextField,对应的默认form组建是TextInput
SlugField短标签字段,仅包含字母,数字,下划线或连字符。可以指定max_length,如未指定

【数字】

字段选项说明
IntegerField()
SmallIntegerField()
BigIntegerField()
PositiveIntegerField()必须为正整数,从0到的值2147483647
PositiveSmallIntegerField()必须为正整数,从0到的值2147483647
FloatField()浮点型
DecimalField(max_digits=8, decimal_places=2)高精度小数,max_digits表示小数点前几位,decimal_places表示小数点后几位,是必选参数。存储最多约十亿个数字,分辨率为小数点后十位

【选择】

字段选项说明
BooleanField布尔型字段
NullBolleanField布尔型字段

【日期时间】

字段选项说明
DateField()只存年月日,auto_now_add=False 每次添加时添加时间, auto_now=False 每次更新都会修改时间
TimeField()只存时分秒毫秒
DateTimeField()存年月日时分秒毫秒
DurationField()时间差

【网络】

字段选项说明
EmailField()电子邮件地址
URLField()资源定位符
GenericIPAdressField()可选参数protocol = IPv4 或 IPv6 或 both

【文件和路径】

字段选项说明
FileField()文件上传字段,FileField(upload_to = None,max_length = 100,** options)
ImageField()是对FileField的扩展,如果实际开发中用到该字段需安装第三方库pillow。 直达pillow文档
BinaryField存储二进制数据(将文件、图片、音视频等以二进制形式存储),官方建议最好以静态文件方式存储
FilePathField()

【关系】

字段选项说明
一对多 ForeignKey().on_delete = models.CASCADE 或 models.SET_NULL 或 models.SET_DEFAULT 或 models.PROTECT 或 models.DO_NOTHING
多对多 ManyToManyField()
一对一 OneToOneField()

⚠️注意: 关系字段官方文档直达

Meta元数据(嵌套类声明更多选项)
选项说明
abstract = True/False是否允许其他类继承
ordering = []排序字段序列。-表示降序,?表示随机
app_labelapp_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包下的models.py文件中,这时候你需要指定你这个模型类是那个应用程序的。比如你在其他地方写了一个模型类,而这个模型类是属于myapp的,那么需要指定
base_manager_name
db_tabletable_name = ‘生成自定义的表名’
db_tablespace有些数据库有数据库表空间,比如Oracle。你可以通过db_tablespace来指定这个模型对应的数据库表放在哪个数据库表空间
default_manager_name
default_related_name
get_latest_byget_latest_by = ‘最新数据排序字段’
managed = True由于Django会自动根据模型类生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。默认值为True,这个选项为True时Django可以对数据库表进行 migrate或migrations、删除等操作。在这个时间Django将管理数据库中表的生命周期。如果为False的时候,不会对数据库表进行创建、删除等操作。可以用于现有表、数据库视图等,其他操作是一样的。
order_with_respect_to
permissionspermissions主要是为了在Django Admin管理模块下使用的,如果你设置了这个属性可以让指定的方法权限描述更清晰可读
default_permissions
proxy
required_db_features
required_db_vendor
select_on_save
indexes创建索引字段
unique_together创建联合唯一,但不能在ManyToMany字段上使用。
index_together创建联合索引
constraints
verbose_nameverbose_name的意思很简单,就是给你的模型类起一个更可读的名字
verbose_name_plural这个选项是指定,模型的复数形式是什么。若未提供该选项, Django 会使用 verbose_name + “s”.
Read-only Meta attributes
label
label_lower
数据查询

执行查询
便利迭代
分割切片
缓存或序列化
通过repr()表现
通过len()统计元素数量
list()转化
bool转换
API
查询所有 —> all()
单条 —> get() —> 只能处理返回一条的
按时间查询
最新的一条 —> .latest(‘按哪个时间’)
最老的一条 —> .earliest(‘按哪个时间’)
按id查询
last()
first()
排序 order_by
order_by(“字段”)
排序后第一条 —> first()
排序后最后一条 —> last()
过滤 filter
过滤 filter(**kwargs)
__exact=’’ 严格匹配
__iexact = ‘’ 不区分大小写
__contains=’’ 包含
__startswith=’’ 以什么开头的
__endswith=’’ 以什么结尾的
__in=[’’,’’,’’] 条件满足列表某个值的
__range(start, end) 起止范围内
数值型型比较
= 等于多少的
__gt=int_number 大于多少的
__lt=int_number 小于多少的
__gte =int_number 大于等于
__lte=int_number 小于等于
日期时间比较
__year 特定年份
__month 特定月份
__day 特定日期
是否为空
__isnull=True 查询空值
匹配正则
__regex=r’这里填正则表达式’ 匹配正则
排除(查找除什么以外的)
exclude(**kwargs)
排序 order_by() 默认升序
order_by( ‘-字段’) 加“ - ”号后为降序
反转 ----> 对查询结果进行反转
QuerySet.reverse()
投影查询
.values(*field) 返回包含特定字段的dict
.values_list(*field) 返回包含特定字段的元组
.values_list(field , flat=True) 每条记录为单值而非tuple
延迟加载
.defer(*field) 指定延迟加载字段
.only(*field) 除指定字段外所有字段都延迟加载
聚合查询
.aggregate() —> 用法示例: Product.objects.aggregate(Avg(‘字段’))
django.db.models.Count —> 统计满足条件的数量
django.db.models.Avg
django.db.models.Sum
django.db.models.Max
django.db.models.Mix

查询注释 .annotate()
复杂条件查询
跨关系查询
多条件查询
Q()对象
同时满足条件
from django.db.models import Q【举例】Product.object.filter.(Q(过滤条件一), Q(过滤条件二))
条件“或“
from django.db.models import Q【举例】Product.object.filter.(Q(过滤条件一), Q(过滤条件二)| Q(过滤条件三))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值