美文网首页
Django-model之feild进阶

Django-model之feild进阶

作者: Eric_Zeng | 来源:发表于2018-10-23 10:12 被阅读12次

    参考地址

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

    代码示例

    from django.db import models
    from wagtail.core.models import Page
    from wagtail.core.fields import RichTextField
    from wagtail.admin.edit_handlers import FieldPanel
    
    class HomePage(Page):
        body = RichTextField(blank=True)
    
        content_panels = Page.content_panels + [
            FieldPanel('body', classname="full"),
        ]
    

    这次主要对body = RichTextField(blank=True) 进行分析,body为对象HomePage的属性,同时body也是对象,在上述代码中定义为RichTextField,且option设置为blank=True

    关于feild的options和types

    feild为样式对象,options为选项,RichTextField就是field的其中一种(wagtile特有的)

    options

    1. Field.null

    • bool型,null选项,默认为False,空字符串,若为真,则为null

    2. Field.blank

    • bool型,空白选项,默认为False,即要求Feild不得为空白,反之可以允许空白内容

    3. Field.choices

    • 只要对象属性里含有长度>=2的list或tuple,就会自动生成一个选择器,如:
    YEAR_IN_SCHOOL_CHOICES = (
        ('FR', 'Freshman'),
        ('SO', 'Sophomore'),
        ('JR', 'Junior'),
        ('SR', 'Senior'),
    )
    

    当然,也可以是多层级嵌套的

    4.Field.db_column

    • 数据库字段名。字段名默认为属性名,否则为指定的名字

    5.Field.db_index

    • bool型,默认为False,若为True,则为改属性在数据库添加索引

    6.Field.db_tablespace

    • 数据库对应表的空间大小。默认为setting里的DEFAULT_INDEX_TABLESPACE

    7.Field.default

    • Field的默认值,可以为一个callable对象,即每次调用该feild时都会回调一个对象

    8.Field.editable

    • 默认为True,即可编辑。设置为False时在后台admin无法展现出来

    9.Field.error_messages

    • 设置跳过的错误信息,可设置值有null, blank, invalid, invalid_choice, unique, and unique_for_date

    10.Field.help_text

    • 给装饰器添加注释,如:
      help_text="Please use the following format: <em>YYYY-MM-DD</em>."

    11.Field.primary_key

    • 主键,Django会自动添加AutoField来设置primary_key=True。
      primary_key=True意味着null=False and unique=True.

    12.Field.unique

    • 默认为False,True时则feild必须唯一,不唯一时会报错django.db.IntegrityError

    13.Field.unique_for_date

    • 设置日期主键,还有unique_for_month、unique_for_year等

    14.Field.verbose

    • 人工field名,若无则Django自动创建

    15.Field.validators

    Field types

    即对象的一些样式

    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:存储数字的小数位

    7.EmailField(max_length=254, **options)

    8.FileField(upload_to=None, max_length=100, **options)

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

    • 有两个可选参数:
      upload_to如果使用默认的FileSystomStorage,文件将会存储到settings文件中配置的MEDIA_ROOT路径中。
      upload_to的值也可以为可调用对象,通过调用这个对象可以获得上传路径。
      instance=: 定义了FileField的模型实例
      filename='': 文件名称。

    9.FilePathField(path=None, match=None, recursive=False, max_length=100, **options)

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

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

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

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

    10.FloatField()

    • 浮点字段,默认的表单窗口部件是NumberInput。和DecimalField经常混淆不清,FloatField在内部使用Python中的float对象,而DecimalField在内部使用Python中的decimal对象。

    11.ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)

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

    12.IntegerField()

    • 整形字段

    13.GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)

    • ip地址字段,protocol='both/ipv4/ipv6' 默认为both

    14.NullBooleanField ()

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

    15.TextField()

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

    16.TimeField(auto_now=False, auto_now_add=False, **options)

    • 时间字段,其值为datetime.time实例

    16.URLField(max_length=200, **options)

    • URL字段。类似于CharField的子类,默认最大长度为200.

    17.UUIDField(**options)

    相关文章

      网友评论

          本文标题:Django-model之feild进阶

          本文链接:https://www.haomeiwen.com/subject/koeozftx.html