Django 4.x Models Field 字段选项&类型

在进行 Django Web 开发的时候不可避免的要进行数据库的设计,如果了解了 Django 中的 models的 Field 字段设置就可以利用 Python 代码进行数据库的设计,通过 migrate 数据迁移的方式在对应的数据库中自动的生成表单。

因此要掌握 Field 的字段设置以及代码编写就尤为重要了,这个是构建整个 Web 系统的基础。

Models 字段类型

models.AutoField

  • 作用说明:默认生成列名为 id 的列,并设置为主键
  • 数据类型:int()
  • 必备参数:primary_key = True 作为主键存在
ColName = models.AutoField(primary_key = True)

models.BigAutoField

  • 作用说明:默认生成列名为 id 的列,并设置为主键
  • 数据类型:int()
  • 数值范围:[1 , 9223372036854775807]
ColName = models.BigAutoField(primary_key = True)

models.SmallAutoField

  • 作用说明:默认生成列名为 id 的列,并设置为主键
  • 数据类型:int()
  • 数值范围:[1 , 32767]
ColName = models.BigAutoField(primary_key = True)

models.BigIntegerField

  • 作用说明:整数类型
  • 数据类型:int()
  • 数值范围:[-9223372036854775808 , 9223372036854775807]
ColName = models.BigIntegerField()

models.UUIDField

  • 作用说明:UUID 唯一标识符
  • 数据类型:char
  • 必备参数:default=uuid.uuid4 默认的数据类型
ColName = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

models.CharField

  • 作用说明:字符串字段,长度小于255
  • 数据类型:varchar(50)
  • 必备参数:max_length = 50 设置字段长度为50
ColName = models.CharField(max_length = 50)

models.BooleanField

  • 作用说明:布尔类型字段
  • 数据类型:tinyint(1)
  • 必备参数:Blank=True ,字段不能为空
ColName = models.BooleanField(Blank = True)

models.DateField

  • 作用说明:日期类型
  • 数据类型:date
  • 必备参数:auto_now = timezone.now 自动更新修改字段保存当前时间
  • 必备参数:auto_now_add = timezone.now 只保留第一次修改字段时间
from django.utils import timezoneColName = models.DateField( auto_now = timezone.now)

models.DateTimeField

  • 作用说明:日期类型
  • 数据类型:datetime
  • 必备参数:auto_now = timezone.now 自动更新修改字段保存当前时间
  • 必备参数:auto_now_add = timezone.now 只保留第一次修改字段时间
from django.utils import timezoneColName = models.DateTimeField(default = timezone.now)

models.DecimalField

  • 作用说明:十进制小数类型,保留几位小数
  • 数据类型:decimal
  • 必备参数:max_digits = 10 设置最大位数
  • 必备参数:decimal_places = 2 设置小数位数
from django.utils import timezoneColName = models.DecimalField(max_digits = 5 , decimal_places = 2)>>> 999.99

models.DurationField

  • 作用说明:存储时间段的字段
  • 数据类型:timedelta
ColName = DurationField(default=timedelta(minutes=20))

models.EmailField

  • 作用说明:电子邮箱字段
  • 数据类型:varchar,必须是email类型
ColName = models.EmailField()

models.FloatField

  • 作用说明:浮点型字段
  • 数据类型:float
ColName = models.FloatField()

models.IntegerField

  • 作用说明:整数类型
  • 数据类型:int
  • 数值范围:[-2147483648 , 2147483647]
ColName = models.IntegerField()

models.GenericIPAddressField

  • 作用说明:可选ip4和ip6字段存储类型
  • 数据类型:varchar
  • 必备参数:protocol = ('both',ipv4,ipv6) 接受的IP协议
  • 必备参数:unpack_ipv4=False 是否解包 IPv4 映射地址
ColName = models.GenericIPAddressField(protocol = 'both')

models.PositiveBigIntegerField

  • 作用说明:允许的整数
  • 数据类型:int
  • 数值范围:[0 , 9223372036854775807]
ColName = models.PositiveBigIntegerField()

models.PositiveIntegerField

  • 作用说明:允许的整数
  • 数据类型:int
  • 数值范围:[0 , 2147483647]
ColName = models.PositiveIntegerField()

models.PositiveSmallIntegerField

  • 作用说明:允许的整数
  • 数据类型:int
  • 数值范围:[0 , 32767]
ColName = models.PositiveSmallIntegerField()

models.SlugField

  • 作用说明:短标签字仅包含减号、下划线、字母、数字
  • 数据类型:varchar
  • 必备参数:max_length = 50 默认最大长度
ColName = models.SlugField()

models.SmallIntegerField

  • 作用说明:允许的整数
  • 数据类型:int
  • 数值范围:[-32768 , 32767]
ColName = models.SmallIntegerField()

models.TextField

  • 作用说明:长文本类型
  • 数据类型:longtext
ColName = models.TextField()

models.TimeField

  • 作用说明:时间类型 HH:MM:SS
  • 数据类型:datetime
  • 必备参数:auto_now = timezone.now 自动更新修改字段保存当前时间
  • 必备参数:auto_now_add = timezone.now 只保留第一次修改字段时间
ColName = models.TimeField()

models.URLField

  • 作用说明:url 链接类型
  • 数据类型:varchar
  • 必备参数:max_length = 200
ColName = models.URLField()

models.BinaryField

  • 作用说明:二进制类型,bytes、 bytearray、memoryview 其中之一
  • 数据类型:varchar
  • 必备参数:无
ColName = models.BinaryField(max_length=None)

models.ImageField

  • 作用说明:图片类型,保存成图片地址
  • 数据类型:varchar
  • 必备参数:upload_to 指定存储路径
  • 必备参数:height_field = 100 自动填充图像高度
  • 必备参数:width_field = 100 自动填充图像宽度
ColName = models.ImageField(upload_to='xxx/')

models.FilePathField

  • 作用说明:文件地址类型,限于文件系统内特定目录下的文件名
  • 数据类型:varchar
  • 必备参数:path 指定存储路径,可自动化设置时间
  • 必备参数:match 用于正则表达式匹配
  • 必备参数:recursive = False 指定包含全部子目录
  • 必备参数:allow_files = True 包含指定位置的文件
  • 必备参数:allow_folders = False 包含指定位置的文件夹
ColName = models.FilePathField(path="/xxx/xxx", match="data.*", recursive=True)

models.FileField

  • 作用说明:文件上传功能
  • 数据类型:varchar
  • 必备参数:upload_to 指定存储路径,可自动化设置时间
ColName = models.FileField(upload_to='uploads/%Y/%m/%d/')

models.JSONField

  • 作用说明:存储 JSON 编码数据
  • 数据类型:json
  • 必备参数:encoder 设置编码
  • 必备参数:decoder 设计解码
ColName = models.JSONField()



Models 字段选项

null

默认为False。null=True 允许字段存储空值。

ColName = models.TextField(null=True)

blank

默认为 False。blank=True 允许Admin后台中添加数据时可为空值。

ColName = models.TextField(blank= True)

primary_key

主键,对AutoField设置主键后,就会代替原来的自增 id 列。

ColName = models.AutoField(primary_key = True)

auto_now 和 auto_now_add

  • auto_now = timezone.now 自动更新修改字段保存当前时间
  • auto_now_add = timezone.now 只保留第一次修改字段时间

choices

创建关联选项,枚举类型。用于 admin 后台字段下拉选择。

GENDER_CHOICE = (        (u'M', u'Male'),        (u'F', u'Female'),    )gender = models.CharField(max_length=2,choices = GENDER_CHOICE)

db_column

用于定义字段的数据库列的名称。

db_index

默认为 False,db_index = True 设置该字段为该表单索引。

db_tablespace

用于定义字段索引的数据库表空间的名称。

max_length

设置允许字段的最大长度。

gender = models.CharField(max_length=2)

default

字段的默认值。

ColName = models.DateTimeField(default = timezone.now)

verbose_name

设置 Admin后台中字段的显示名称。

ColName = models.DateTimeField(verbose_name='登记日期')

unique

设置字段唯一值,默认Fasle。

address = models.CharField(maxlenth = 50 , unique= True)

unique_for_date

设置 DateField 或 DateTimeField 要求此字段对于日期字段的值是唯一的。

date = models.DataTimeField(unique= True)

unique_for_month

设置 DateField 或 DateTimeField 要求此字段对于月份字段的值是唯一的。

month = models.DataField(unique= True)

unique_for_year

设置 DateField 或 DateTimeField 要求此字段对于年份字段的值是唯一的。

year = models.DataField(unique= True)

editable

默认为 True,editable = True 该字段在 Admin 后台可编辑。

#

error_messages

允许覆盖该字段将引发的默认消息。

GENDER_CHOICE = (        (u'M', u'Male'),        (u'F', u'Female'),    )gender = models.CharField(max_length=2,choices=GENDER_CHOICE,error_messages={"错误类型":"错误原因"})

help_text

在 Admin 后台中提示帮助信息。

ColName = models.CharField(maxlenth = 10,help_text = '这里是提示信息')

validators

用于为字段运行的验证器列表。

def validate_even(value):    if '.com' not in value :        raise ValidationError(            _('不可使用 %(value) 邮箱进行注册'),            params={'value': value},        )email = models.EmailField(validators = [validate_even])

upload_to

指明上传的文件防止根目录下的 /upload/ 文件夹下。

file_path = modles.FileField(upload_to = "./upload/")




发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章