欢迎来到Python教程自学网!
当前位置: 首页 > django > Django有关models数据类型介绍

Django有关models数据类型介绍

   

Django有关models数据类型介绍

介绍:在model中添加字段的格式一般为:“field_name = field_type(**field_options)”

1、field options(所有字段共用)

null默认为False,True则表示可以为null。(空字符串在数据库中可能被存储为'')

blank默认为False,True表示可以为空。

choice可选的,限制了该选项的字段值必须是所指定的choice中的一个。

db_column  数据库column名称。默认为本字段的名称。

db_index  如果为True的话,该字段的数据库索引将会被创建。

default   设置该字段的默认值,可以是值也可以是对象。

editable   默认为True,若为False,则不会在admin/界面显示

primary_key  若设置为True,则表示将该字段设置为主键。一般情况下django默认会设置一个自增长的id主键。

unique   若设置为True,该字段值不可重复。

2、field type(可以分为普通字段以及关系字段)

普通字段

AutoField()  根据已有id自增长的整形唯一字段,一般每个model类不需设置该字段,因为django会为每个model自动设置。

        django默认会为每个model类添加如下语句:id = models.AutoField(primary_key=True)  当其他字段添加了primary_key属性,则不会创建id字段了。

  每个model类仅能有一个主键。

BooleanField()  布尔型字段,默认的表单窗口部件是CheckBoxInput。

CharField()  字符型字段,默认的表单窗口部件是TextInput。该字段类型有一个必需参数:max_length  在数据库水平限定了字符串最大长度。

 DateField()  日期字段,字段的值是python中datetime.date的实例,默认的表单窗口是TextInput有几个可选的参数:

 auto_now=True/False:当设置为True时,每当该对象使用save()时,该字段的值就会被更新。

 auto_now_add=True/False: 当设置为True时,该字段的值为该对象被创建时的日期。

DateTimeField()  日期和时间字段,值为datetime.datetime实例。默认的表单窗口以及可选参数同上。

DecimalField()  混合精度的小数型数字字段。有两个必需的参数:

 max_digits=ingt_number:限定数字的最大位数(包含小数位)。

 decimal_places=int_number:存储数字的小数位。

EmailField(max_length=254, **options)  邮件字段,使用EmailValidator进行验证。

关系字段

        关系字段:一对一,多对一,多对多

  一对一:  现在有很多一对一辅导班,也就是上课时,一个老师对应一个学生,一个学生对应一个老师

  多对一:  很多偏远山区的学校可能整个学校只有一个老师,这一个老师对应多个学生,所有的学生对应这一个老师

  多对多:  而我们则很幸福,学校里有许多老师,一个老师教习一科,学生有多个老师,老师有多个学生。

ForeignKey(othermodel, on_delete, **options)  多对一或者一对多或者外键字段。

 othermodel:  所关联的模型,'多' model使用外键关联  '一'model。

      当所关联的模型为他自己时,使用'self'

      当引用的模型为其他app中的模型时,要加上app名称标签:  'app_name.model_name'

      数据库会自动在外键字段上创建索引,可以使用de_index=False关闭该功能。

 on_delete: 当删除 "一" 模型对象时,django会根据该参数的值对与该对象相关联的其他对象(也就是 ‘多’)进行操作。

        在django1.9以及之前的版本中,on_delete作为一个关键字参数。而在1.10则可以作为第二个参数

      models.CASCADE:   默认为models.CASCADE   级联删除。当删除'一'时,‘多’会被删除。比如:

             modles.PROTECT :    当删除一个具有外键关系的对象时,会引发一个异常,阻止删除该对象

      models.SET_NULL:   设置删除对象所关联的外键字段为null。但字段的null属性必需为True

      models.SET_DEFAULT :    设置删除对象所关联的外键字段为默认的值。

      models.SET(value)  :设置删除对象所关联的对象的外键字段为value,value也可以是一个可调用函数。

                     models.DO_NOTHING :  不做任何操作

    limit_choices_to  限制该字段为选项形。格式:limit_choices_to={'is_staff': True}。值也可以为可调用函数。

              related_name  设置从关联对象到自身的关系的名称,若值为'+'  则关联对象与自身无逆向关系。详解请看官方文档。

    to_field  设置所关联对象的关联字段。默认为关联对象的主键字段。

ManyToManyField(othermodel, **options)  多对多字段。

 othermodel:  所关联的model名称

 db_table:  多对多关系会在两个模型所对应的表中间创建一个‘中间表’ ,将多对多转换为两个多对一,该选项为这个中间表设置名称。一般来说django会默认为中间表创建名称,但人们读起来可能搞不清楚究竟中间表关联到了哪里。

 related_name:  同多对一字段中的related_name

 limite_choices_to:  同….

 symmetrical:  当多对多关联对象为自身时可能会用到的参数。默认为True。a,b同属于person模型,person中的friends字段与自身设置了多对多关系,当该值设置为True时,django假定关系为对称,即:a是b的朋友,那么b也是a的朋友。设置为False时,django会强制为逆向关系创建描述信息。

 though:  不想让django自动创建中间表,手动创建中间表所对应的model,通过though指定对应的model名称。

 though_field:  当though参数被使用时,该参数才会有效。指定使用哪些中间模型字段来确立两个模型的多对多关系。