模型简介
模型是一个用于表示数据的Python类,包含基本的数据字段和行为,在Django中,通常一个模型就代表一个数据库表。模型继承自django.db.models.Model, 模型的每一个属性代表一个数据表的列。
例子:1
2
3
4
5from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
需要注意的是django根据模型所属应用程序生成数据库表明,命名规则:应用程序名_模型名,Django会自动添加id字段作为数据库表的主键。
个人理解
个人对模型部分的理解是对数据库的操作,models.py文件中的所有操作都可以找到与之对应的数据库操作,只不过有特有的字段名称。而在编辑好模型后进行的数据迁移操作实际上就是将models.py里面的翻译成脚本,然后通过执行脚本文件对数据库进行操作从而生成当前APP所需要用到的数据库。
字段
字段是一系列数据表列的定义。字段名字中不能出现连续的两个下划线,因为连续的两个下划线是Django数据库API的特殊语法。
常用字段
- AutoField
根据已有的ID自动增长,常用作主键,一般情况下会自动创建。 - BooleanField
字段值只包含True和False,默认情况下对应HTML的复选框: - CharField
保存不太长的字符串(超长字段建议使用TextField)。必须给出CharField.max_length属性值,默认情况下对应HTML的文本框:。 - DateField
日期类型,对应Python中的datetime.date类型。参数有:
auto_now:每当保存数据(Save())时都会更新时间为当前时间且不能被重写。
auto_now_add: 只有在数据第一次创建时才会保存当前时间且不能被重写。 - DateTimeField
日期时间类型,对应Python中的datetime.datetime类型,参数与DateField一样。默认情况下对应HTML的复选框:。 - EmailField
可以验证有效邮件地址的CharField。 - FileField
文件上传控件,可选参数:
upload_to:文件上传后保存位置(在settings.py中设置MEDIA_ROOT,upload_to所指定的路径会拼接在MEDIA_ROOT之后)
storage:负责文件存储的Python类,用于存储和提取文件。 - ImageField
包含FileField的全部属性与方法,但是仅允许上传图片类型的文件,额外两个可选属性:
height_field: 高度
width_field: 宽度 - TextField
超长文本类型 - URLField
只接受URL字符串的CharField类型。
通用属性
- null
默认为True,保存模型后数据库的对应字段中保存空。
文本型字段尽可能不用null属性,因为当时用默认值null时,数据库中就可能出现两种空数据:NULL和空字符串,而Django默认使用空字符串。 - blank
默认值为False,当设置为True时字段值允许为空 choices
属性值为一个可迭代对象,如列表或元组,迭代对象的每个成员包括两个字符串,第一个值作为字段值保存到数据库中,第二个值用于提高字段的可读性。例:1
2
3
4
5
6
7
8
9
10
11
12YEAR_IN_SCHOOL_CHOIECES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
) # 定义一个元组
year_in_school = models.CharField(
max_length = 2,
choices = YEAR_IN_SCHOOL_CHOICES, # 直接引用元组
default = 'Freshman',
)default
设置字段默认值。属性值可以是字符串也可以是方法。默认值不可以是可变对象,如列表。- primary_key
将字段设置为数据表主键。如果模型中任何字段都不包含primary_key=True属性,会自动添加一个字段作为主键。 - verbose_name
类似于字段的说明。
除了ForeignKey、ManyToManyField、OneToOneField三种字段类型外,其他字段类型都包含一个默认的verbose_name属性,可以直接在字段属性列表的第一位输入文本作为verbose_name属性值,如未给出则会将字段名作为verbose_name(字段名如果包含下划线会换成空格)。个人理解
模型对应数据库的表,那么字段就对应表的列。
元属性
通过在模型中添加一个叫做Meta的子类定义。
abstract
abstract = True
,当前模型将成为一个抽象类。
ordering
该属性是一个元组、列表或者查询表达式。定义了显示的顺序。
总结
模型的构建对应数据库的构建,这次只记录了目前为止用过的一些知识,还有很多字段、属性、元属性尚未涉及,以后碰到了再继续补充。