一. models中所有字段
-
AutoField(Field)
int自增列,必须填入参数 primary_key=True -
BigAutoField(AutoField)
bigint自增列,必须填入参数 primary_key=True
如果某张表中没有设定自增列,models会默认创建一个名为 id 的列
-
SmallIntegerField(IntegerField)
小整数 -32768 ~ 32767 -
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 0 ~ 32767 -
IntegerField(Field)
整数列(有符号的) -2147483648 ~ 2147483647 -
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField
正整数 0 ~ 2147483647 -
BigIntegerField(IntegerField)
长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 -
DurationField(Field)
长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 -
FloatField(Field)
浮点型,与 python 里的 float 实例相同 -
DecimalField(Field)
- 10进制小数 - 参数: max_digits,小数总长度 decimal_places,小数位长度 -
BinaryField(Field)
二进制类型,不能使用 filter 函数获得 QuerySet -
BooleanField(Field)
布尔值类型(True/False),默认为None -
NullBooleanField(Field)
可以为空的布尔值 -
CharField(Field)
字符类型, 必须提供 max_length 参数, max_length表示字符长度 -
TextField(Field)
大文本,巨长的文本 注意: 如果使用 MySQLdb 1.2.1p2 和 utf-8_bin 编码,会有一些问题https://docs.djangoproject.com/en/dev/ref/databases/#mysql-collation -
EmailField(CharField)
字符串类型,Django Admin以及ModelForm中提供验证机制,在 CharField 基础上附加了 邮件地址合法性验证 -
IPAddressField(Field)
字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 -
GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6 - 参数: protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6" unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both" -
URLField(CharField)
字符串类型,Django Admin以及ModelForm中提供验证 URL -
SlugField(CharField)
字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) -
CommaSeparatedIntegerField(CharField)
字符串类型,格式必须为逗号分割的数字 -
UUIDField(Field)
字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 -
FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能 - 参数: path 文件夹路径 match=None 正则匹配 recursive=False 递归下面的文件夹 allow_files=True 允许文件 allow_folders=False 允许文件夹 -
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录 不支持 primary_key 和 unique 选项, 否则会报 TypeError 异常 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage - 注意: 必须设置 FileField.upload_to 选项,这个是 本地文件系统路径,附加在 MEDIA_ROOT 设置的后边,也就是 MEDIA_ROOT 下的子目录相对路径 使用 FileField 和 ImageField 需要以下步骤: (1)修改 settting.py,设置 MEDIA_ROOT(使用绝对路径),指定用户上传的文件保存在哪里。设置 MEDIA_URL,作为 web地址 前缀,要保证 MEDIA_ROOT 目录对运行 Django 的用户是可写的; (2)在 model 中增加 FileField 或 ImageField,并指定 upload_to 选项指定存在 MEDIA_ROOT 的哪个子目录里; (3)存在数据库里的是什么东西呢?是 File 或 Image相对于 MEDIA_ROOT 的相对路径,你可以在 Django 里方便的使用这个地址,比如你的 ImageField 叫 tupian,你可以在 template 中用{{object.tupian.url}}。 -
ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage width_field=None, 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名(字符串) -
DateTimeField(DateField)
日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 常用附加选项: DateField.auto_now: 每次执行 save 操作的时候自动记录当前时间,常作为最近一次修改的时间 使用。注意:总是在执行save 操作的时候执行,无法覆盖。 DateField.auto_now_add: 第一次创建的时候添加当前时间。常作为 创建时间 使用。注意:每次create 都会调用 -
DateField(DateTimeCheckMixin, Field)
日期格式 YYYY-MM-DD 常用附加选项与DateTimeField相同 -
TimeField(DateTimeCheckMixin, Field)
时间格式 HH:MM[:ss[.uuuuuu]]
二. 常用的字段
字符串类型:
EmailField(CharField)
IPAddressField(Field)
URLField(CharField)
SlugField(CharField)
UUIDField(Field)
FilePathField(Field)
FileField(Field)
ImageField(FileField)
CommaSeparatedIntegerField(CharField)
时间类型
DateTimeField(null=True)
数字类型
IntegerField()
FloatField()
DecimalField(max_digits=30,decimal_places=10) #精确的小数类型
枚举
应用于固定的,不会修改的,例如:性别, 颜色, 会员等级等...
color_list = (
(1,'黑色'),
(2,'白色'),
(3,'蓝色')
)
color = models.IntegerField(choices=color_list)
1. 自己操作:
自己取,自己用
2. 给Django admin使用
应用场景:
选项固定
*PS: 外键应用于经常发生变动的选项!FK选项动态
三. Django ORM中models字段的参数
- 字段的参数
null=True
# boolean 值,缺省设置为false。通常不将其用于字符型字段上,比如CharField,TextField上。字符型字段如果没有值会返回空字符串。
default='tt'
# 给当前字段设定的缺省值,可以是一个具体值,也可以是一个可调用的对象,如果是可调用的对象将每次产生一个新的对象
db_index=True
# boolean 值,如果为True将为此字段创建索引
db_column
# string 值,指定当前列在数据库中的名字,不设置,将自动采用model字段名
unique=True
# boolean值,数据是否进行唯一性验证
max_length=xxx
# 表示字符最大长度
primary_key= True
# 设置主键,如果没有设置django创建表时会自动加上:id = meta.AutoField(‘ID’, primary_key=True)
class Meta: # 用于创建多列间的组合操作
# unique_together = ( #创建有关联的联合唯一索引
# ('email','ctime'),
# )
# index_together = ( #创建普通的索引
# ('email','ctime'),
# )
- DjangoAdmin提供的参数
verbose_name # Admin中显示的字段名称
blank # Admin中是否允许用户输入为空
editable # Admin中是否可以编辑
help_text # Admin中该字段的提示信息
choices # Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
# 如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
error_messages # 自定义错误信息(字典类型),从而定制想要显示的错误信息;
# 可覆盖的key 有 null, blank, invalid, invalid_choice, 和 unique。
validators
# 有效性检查。无效则抛出 django.core.validators.ValidationError 异常
# 自定义错误验证(列表类型),从而定制想要的验证规则
部分内容来自互联网
~ Over 人生苦短,我用Python MM~