Django-model之feild进阶

参考地址

在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)