Django之models模块

Posted wutao666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之models模块相关的知识,希望对你有一定的参考价值。

一、字段

 

1、 AutoField(Field) int自增列,必须填入参数 primary_key=True

 

2、BigAutoField(AutoField) bigint自增列,必须填入参数 primary_key=True

 

注意:当model中如果没有自增列,则自动会创建一个列名为id的列

 

3、SmallIntegerField(IntegerField) 小整数 -32768 ~ 32767

 

4、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正小整数 0 ~ 32767

 

5、IntegerField(Field)        整数列(有符号的) -2147483648 ~ 2147483647

 

6、PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)    正整数 0 ~ 2147483647

 

7、BigIntegerField(IntegerField)     长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

 

8、BooleanField(Field)        布尔值类型

 

9、NullBooleanField(Field)    可以为空的布尔值

 

10、CharField(Field)        字符类型

      必须提供max_length参数, max_length表示字符长度

 

11、TextField(Field)        文本类型

 

12、EmailField(CharField) 字符串类型

       Django Admin以及ModelForm中提供验证机制(即邮件字段,可以验证输入邮件格式是否正确)

 

13、IPAddressField(Field) 字符串类型

       Django Admin以及ModelForm中提供验证 IPV4 机制(即ip字段,可以验证输入IP是否正确)

 

14、GenericIPAddressField(Field) 字符串类型

        Django Admin以及ModelForm中提供验证 Ipv4和Ipv6

        参数:

        protocol:用于指定Ipv4或Ipv6,其值为:‘both‘,"ipv4","ipv6"

        unpack_ipv4:如果指定为True,则输入::ffff:10.0.0.1时候,可解析为10.0.0.1,开启刺功能,需要protocol="both"

 

15、URLField(CharField) 字符串类型(即邮件字段,可以验证输入的url否是一个合法url)

       Django Admin以及ModelForm中提供验证 URL

 

16、SlugField(CharField) 字符串类型

        Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)

 

17、CommaSeparatedIntegerField(CharField) 字符串类型

       格式必须为逗号分割的数字

 

18、UUIDField(Field) 字符串类型

        Django Admin以及ModelForm中提供对UUID格式的验证

 

19、FilePathField(Field) 字符串类型

       Django Admin以及ModelForm中提供读取文件夹下文件的功能

      参数:

               path:文件夹路径

               match=None:正则匹配

               recursive=False:递归下面的文件夹

               allow_files=True:允许文件

               allow_folders=False:允许文件夹

 

20、FileField(Field)    字符串类型

       路径保存在数据库,文件上传到指定目录

      参数:

      upload_to = ""                    上传文件的保存路径

      storage = None                  存储组件,默认django.core.files.storage.FileSystemStorage

 

21、ImageField(FileField) 字符串类型

       路径保存在数据库,文件上传到指定目录

      参数:

              upload_to = ""            上传文件的保存路径

              storage = None          存储组件,默认django.core.files.storage.FileSystemStorage

              width_field=None      上传图片的高度保存的数据库字段名(字符串)

             height_field=None      上传图片的宽度保存的数据库字段名(字符串)

 

22、DateTimeField(DateField)

       日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

 

23、DateField(DateTimeCheckMixin, Field)

       日期格式 YYYY-MM-DD

 

24、TimeField(DateTimeCheckMixin, Field)

        时间格式 HH:MM[:ss[.uuuuuu]]

 

#日期字段常用的参数

auto_now:这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储"最后修改时间"的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被"强制"更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。

 

auto_now_add:这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储"创建时间"的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的

 

25、DurationField(Field) 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型

 

26、FloatField(Field)    浮点型

 

27、DecimalField(Field) 十进制小数

       参数:

              max_digits           小数总长度

             decimal_places     小数位长度

 

28、BinaryField(Field) 二进制类型

 

29、models.ForeignKey(other_table)      创建外键(即创建一对多的表的关联)

      参数:

            to=:                   要进行关联的表名

            to_field=:          要关联的表中的字段名称

            on_delete=:      当删除关联表中的数据时,当前表与其关联的行的行为

            on_delete的参数:

                   - models.CASCADE                   删除关联数据,与之关联也删除

                   - models.DO_NOTHING             删除关联数据,引发错误IntegrityError

                   - models.PROTECT                    删除关联数据,引发错误ProtectedError

                   - models.SET_NULL                   删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

                   - models.SET_DEFAULT            删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

                   - models.SET                              删除关联数据

  

30、models.ManyToManyField(other_table) 创建多对多的表的关联

 

31、models.OneToOneField(other_table)     创建一对一的关联

 

二、字段公用参数

null                            数据库中字段是否可以为空

db_column                数据库中字段的列名

db_tablespace          表空间,如果该字段已经创建了索引,那么数据库表空间的名称将作为该字段的索引名。注意,部分数据库不支持表空间

default                       数据库中字段的默认值

primary_key              数据库中字段是否为主键

db_index                   数据库中字段是否可以建立索引

unique                       数据库中字段是否可以建立唯一索引

unique_for_date        数据库中字段【日期】部分是否可以建立唯一索引

unique_for_month     数据库中字段【月】部分是否可以建立唯一索引

unique_for_year        数据库中字段【年】部分是否可以建立唯一索引

 

verbose_name          Admin中显示的字段名称

blank                         Admin中是否允许用户输入为空

editable                     Admin中是否可以编辑

help_text                   Admin中该字段的提示信息

choices                     Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

如:course = models.IntegerField(choices=[(0, ‘云计算‘),(1, ‘Linux‘),],default=1)

 

error_messages      自定义错误信息(字典类型)从而,定制想要显示的错误信息

字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date

如:{‘null‘: "不能为空.", ‘invalid‘: ‘格式错误‘}

 

validators                自定义错误验证(列表类型),从而定制想要的验证规则(例子如下)

from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
test = models.CharField(
    max_length=32,
    error_messages={
        error1: 错误信息1,
        error2: 错误信息2,
        error3: 错误信息3,
    },
    validators=[
        RegexValidator(regex=root_d+, message=出错误了, code=e1),
        RegexValidator(regex=root_hehed+, message=又出错误了, code=e2),
        EmailValidator(message=又又出错误了, code=e3), 
    ]
)

 

以上是关于Django之models模块的主要内容,如果未能解决你的问题,请参考以下文章

Django基础之数据库增删改查

django 之admin模块

Django打造在线教育平台_day_2:新建users app 编写models之完善

Django详解之models操作

django models.py模块的外部引用

Django之Models