字段
模型中最重要且唯一必要的是数据库的字段定义。字段在类属性中定义。定义字段名时应小心避免使用与 模型 API 冲突的名称, 如 clean, save, or delete 等.
字段类型
models.AutoField 自增列 = int(11)
如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
BooleanField:
布尔类型字段,HTML挂件为CheckBoxInput.取值为:Ture/False,不能为null.默认值为None.
NullBooleanField:
布尔类型,HTML挂件为NullBooleanSelect,取值为:True/False/null.
models.CharField 字符串字段
- 字符串字段,用于小到大的字符串。
- 对于大量文本,请使用TextField。
- 此字段的默认表单窗口小部件是a TextInput。
- CharField 有一个额外的必要参数:
- CharField.max_length
- 字段的最大长度(以字符为单位)。max_length在数据库级别和Django的验证中强制执行 MaxLengthValidator。
models.BooleanField
- 布尔类型=tinyint(1)
- 不能为空,Blank=True
- 在Django 2.1中更改:
- 在2.1版本中,此字段不允许null=True,必须使用NullBooleanField。现在不鼓励使用后者,因为它可能会在未来版本的Django中被弃
models.ComaSeparatedIntegerField
- 用逗号分割的数字=varchar
- 继承CharField,所以必须 max_lenght 参数
models.DateField
- 日期类型 date
- DateField.auto_now_add:取值为False/True,作用为自动取值为实例创建的时间,创建于。 DateField.auto_now:取值为:False/True,作用为自动设置值为最后一次保存的时间,更新于。 auto_now、auto_now_add、default三个选项是互斥的.
models.DateTimeField
- 日期类型 datetime
- 同DateField的参数
TimeField:
- 日期类型,使用的是python 的datetime.time实例,参数和上述一样.
- 查询python参考可知,Data主要用于日期,表示年月日,Time主要用于时间,表示时分秒,而DateTime则是完整的年月日时分秒都有.
models.Decimal
- 十进制小数类型 = decimal
- 必须指定整数位max_digits和小数位decimal_places
models.EmailField
- 字符串类型(正则表达式邮箱) =varchar
- 对字符串进行正则表达式
models.FileField
- 文件上传字段。
- 有两个可选参数:
- FileField.upload_to 此属性提供了设置上载目录和文件名的方法
- FileField.storage 存储对象,用于处理文件的存储和检索。
- FileField实例在数据库中创建为varchar 默认最大长度为100个字符的列。与其他字段一样,您可以使用max_length参数更改最大长度。
models.FloatField 浮点类型 = double
models.IntegerField 整形
models.BigIntegerField 长整形
integer_field_ranges = {
'SmallIntegerField': (-32768, 32767),
'IntegerField': (-2147483648, 2147483647),
'BigIntegerField': (-9223372036854775808, 9223372036854775807),
'PositiveSmallIntegerField': (0, 32767),
'PositiveIntegerField': (0, 2147483647),
}
models.IPAddressField 字符串类型(ip4正则表达式)
models.GenericIPAddressField 字符串类型(ip4和ip6是可选的)
参数protocol可以是:both、ipv4、ipv6
验证时,会根据设置报错
models.NullBooleanField 允许为空的布尔类型
models.PositiveIntegerFiel 正Integer
models.PositiveSmallIntegerField 正smallInteger
models.SlugField 减号、下划线、字母、数字
models.SmallIntegerField 数字
- 数据库中的字段有:tinyint、smallint、int、bigint
models.TextField 字符串=longtext
- 如果指定max_length属性,它将反映在Textarea自动生成的表单字段的 窗口小部件中。但是,它不会在模型或数据库级别强制执行。使用一个 CharField。
models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
models.URLField 字符串,地址正则表达式
models.BinaryField 二进制
models.ImageField 图片
- 继承所有属性和方法FileField,但也验证上载的对象是有效图像。除了可用于特殊属性FileField,一个ImageField也具有height和width属性
- ImageField.height_field
- 每次保存模型实例时,将使用图像高度自动填充的模型字段的名称。
- ImageField.width_field
- 每次保存模型实例时,将使用图像宽度自动填充的模型字段的名称。
models.FilePathField 文件
CharField的选择仅限于文件系统上某个目录中的文件名。有三个特殊参数,其中第一个是 必需的:
FilePathField.path
需要。从中可以FilePathField选择的目录的绝对文件系统路径 。示例:"/home/images"。
FilePathField.match
可选的。作为字符串的正则表达式,FilePathField 用于过滤文件名。请注意,正则表达式将应用于基本文件名,而不是完整路径。例如:"foo.*.txt$",这将匹配一个名为foo23.txt而不是bar.txt或foo23.png。
FilePathField.recursive
可选的。无论是True或False。默认是False。指定是否path应包括所有子目录
FilePathField.allow_files
可选的。无论是True或False。默认是True。指定是否应包含指定位置的文件。无论是这个还是 allow_folders必须的True。
FilePathField.allow_folders
可选的。无论是True或False。默认是False。指定是否应包括指定位置的文件夹。无论是这个还是allow_files必须的True。
当然,这些参数可以一起使用。
一个潜在的问题是match适用于基本文件名,而不是完整路径。所以,这个例子:
FilePathField(path="/home/images