• Django的Models字段含义


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

    一  field options(所有字段共用)

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

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

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

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

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

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

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

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

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

    二  field type(字段类型,细分的话可以分为普通字段以及关系字段)

     1  普通字段

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

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

       每个model类仅能有一个主键

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

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

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

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

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

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

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

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

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

    #to store numbers up to 999 with a resolution of 2 decimal places, you’d use
    models.DecimalField(..., max_digits=5, decimal_places=2)

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

       8  FileField(upload_to=Nonemax_length=100**options)  文件上传字段。

      这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100.

      有两个可选参数:

        upload_to

          如果使用默认的FileSystomStorage,文件将会存储到settings文件中配置的MEDIA_ROOT路径中。

          upload_to的值也可以为可调用对象,通过调用这个对象可以获得上传路径。

            instance=:  定义了FileField的模型实例

            filename='':  文件名称。

        storage  用来设定文件存储仓库    

      9  FilePathField(path=Nonematch=Nonerecursive=Falsemax_length=100**options)

        这个字段的值被限制在系统上某个目录中的所有文件名集合中。有三个参数

        path='':  该参数必需。上行所说的‘某个目录’的绝对路径。Example: "/home/images".

        match='pattern':  可选参数。格式是正则表达式。用来拣选符合匹配正则表达式的文件

        recursive=True/False: 可选参数,默认为False。设定是否递归该目录下所有子目录的所有文件。    

    FilePathField(path="/home/images", match="foo.*", recursive=True)

      10  FloatField()  浮点字段,默认的表单窗口部件是NumberInput。和DecimalField经常混淆不清,

        FloatField在内部使用Python中的float对象,而DecimalField在内部使用Python中的decimal对象。

      11  ImageField(upload_to=Noneheight_field=Nonewidth_field=Nonemax_length=100**options

        图像字段。继承了FileField的所有属性和方法。而且还能自动验证上传的对象是否为合法的图像。

      12  IntegerField  整形字段。

      13  GenericIPAddressField(protocol='both'unpack_ipv4=False**options)  ip地址字段

        protocol='both/ipv4/ipv6'  默认为both

        unpack_ipv4   用处不大。

      14  NullBooleanField  类似于BooleanField,不同的是其允许值为null

      15  TextField()   与CharField类似,但一般用来存储体积较大的文本。

      16  TimeField(auto_now=Falseauto_now_add=False**options)   时间字段,其值为datetime.time实例

      17  URLField(max_length=200**options)    URL字段

        类似于CharField的子类,默认最大长度为200.

      18  UUIDField(**options)  通用唯一标识字段,当不想用django默认设置的AutoField字段时,可以用该字段代替。

     

      2  关系字段

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

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

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

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

      1  ForeignKey(othermodelon_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  设置所关联对象的关联字段。默认为关联对象的主键字段。

        

      2  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参数被使用时,该参数才会有效。指定使用哪些中间模型字段来确立两个模型的多对多关系。

      3  OneToOneField(othermodelon_deleteparent_link=False**options)  一对一字段。

        othermodel: .......

        on_delete:........

        related_name:...........

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/geogre123/p/10621364.html
Copyright © 2020-2023  润新知