Django-model之feild进阶
2018-10-23 本文已影响12人
Eric_Zeng
在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)
- 邮件字段,使用EmailValidator进行验证
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.