Django模型层-基本操作

模型类定义

模型定义的基本结构如下

from django.db import models

class ModelName(models.Model):
	field1=models.XXField(...)
	field2=models.XXField(...)
	...
	class Meta:
		db_table=...
		other_metas=...

解析:
所有的django模型都继承自django.db.models.Model类
通过其中的类属性定义模型字段,模型字段必须是某种models.Model类
通过模型类中的Meta字段定义类似于数据库表名、数据默认排序方式等元模型数据
Meta类的属性名由django预定义,常用的Meta类属性汇总如下
abstract: True or False,标识本类是否为抽象基类
app_label: 定义本类所属的应用,如app_label=‘myapp’
db_table: 映射的数据表名
default_related_name: 定义本模型的反向关系引用名称,默认与模型名一致
get_latest_by: 定义按哪个字段值排列以获得模型的开始或结束记录,本属性值通常指向日期或整形的模型字段
managed: True or False,定义django的manage.py命令行工具是否管理本模型
order_with_respect_to: 定义本模型可以按照某外键引用的关系排序
ordering: 本模型记录的默认排序字段,可以设置多个字段,默认以升序排列如果以降序排列则需要在字段名前加"负号"

普通字段类型

普通字段是指模型类中除外键关系外的数据字段属性
Autofield: 一个自动递增的整形字段,添加记录是它会自动增长
BigIntegerField: 64位整形字段
BinaryField: 二进制数据字段只能通过bytes对其进行赋值
BooleanField: 布尔字段
CharField: 字符串字段
TextField: 大容量文本字段
CommaSparatedIntegerField: 用于存放逗号分隔的整数值
DateField: 日期字段,一个javascript日历和一个’today’快捷按键
DateTimeField: 类似于DateField,但同时支持时间的输入
DurationField: 存储时间周期
EmailField: 一个带有email合法性检查的CharFIeld
FileField: 一个文件上传字段
FilePathField: 按目录限制规则选择文件
FloatField: 浮点型字段
ImageField: 类似于FileField字段,同时验证上传对象是否是一个合法图片
IntegerField: 用于保存一个整数
IPAddressField: 一个字符串形式的IP地址
NullBooleanField: 类似于BooleanFIeld,但比其多一个’None’选项
PhoneNumberField: 带有美国风格的电话号码校验的CharField字段
PositiveIntegerFIeld: 只能输入非负数的IntegerFIeld
SmallIntegerFIeld: 类似于IntegerFIeld,只具有较小的输入范围
SlugField: 只包含字母数字以及下划线和连字符的输入字段,它通常用于URL
TimeFIeld: 时间字段类似于DateTimeField,但只能表达和输入时间
URLField: 用于保存URL
USStateField: 美国州名的缩写字段
XMLField: XML字符字段,是具有XML合法性校验的TextField

常用字段参数

每个字段类型都有一些特定的HTML标签和表单验证参数,比如height_field、path等,但同时有一些每个字段都可以设置的公共参数,比如通过primary_key参数可以设置一个模型的主键字段
null: 定义是否允许相对应的数据库字段为Null,默认设置为False
blank: 定义字段是否可以为空,与null不同,null是数据库中的非空约束,blank是HTML中的表单验证,即判断用户是否可以不输入数据
choices: 定义字段的可选值,本字段的值应该是一个包含二维元素的元组,元组的每个元素的第一个值是实际存储的值,第二个值是HTML页面中进行选择时显示的值
default: 设定默认值,例如default=“please input here”
help_text: HTML页面中输入控件的帮助字符串
primary_key: 定义字段是否为主键为True 或 False
unique: 是否为字段定义数据库的唯一约束

基本查询

Django有两种过滤器用于筛选记录
filter(**kwargs): 返回符合筛选条件的数据集
exclude(**kwargs): 返回不符合筛选条件的数据集
比如,以下语句

Comment.objects.filter(pub_date__year=2015)

该语句是用来查询所有pub_date的年字段是2015年的Comment
需要注意的是pub_date_year并不是模型中定义的一个字段,而是django定义的一种独特的字段查询(field lookup)表达方式
field lookup的基本表现形式是

字段名称__谓词

即由"用双下划线连接的字段名称和谓词"来表达查询条件,类似的还有很多其他的field lookup方式,比如

Comment.objects.filter(pub_date__in=[1,5,9]) #查询所有id为1,5,9的Comment数据集

除了all(),filter(),exclude()等返回数据集的函数,django还提供了get()用于查询单条记录,比如获取id为3的记录

Comment.objects.get(id_exact=1)

django还提供了查询指定条数的数据集的下标操作,该特性使得django模型能够支持标准SQL中的LIMIT和DFFSET谓词,比如

Comment.objects.all()[:10]  #返回数据集,查询前十条记录
Comment.objects.all()[10:20]  #返回数据集,查询第十条到第二十条记录
Comment.objects.all()[1]  #返回单条记录,查询第二条记录

django还提供了order_by操作

Comment.objects.order_by('headline') #返回数据集,并按照headline字段排序

数据保存与删除

与传统SQL相比,django的一个较大的优势是定义了一个统一的方法save(),用于完成模型的Insert和Update操作,在执行模型实例的save()函数时,django会根据模型的主键,判断记录是否存在,如果存在则执行Update操作,否则执行Delete操作
django模型提供了delete()方法用于删除记录,既可以删除单条记录也可以删除数据集

Comment.objects.filter(pub_date__year=2015).delete()  #删除所有2014年的记录
Comment.objects.get(id_=3).delete()  #删除id=3的单条记录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值