Django 字段通用属性,每一个字段都需要一系列属性,例如使用CharField时必须给出max_length属性值,除了以上特殊字段属性外,Django还为所有字段提供了一系列通用属性,这些属性都是可选属性。
接下来详细介绍字段通用属性。
null
默认值为True,此时保存模型时,Django会在数据库的对应字段中保存空。
对于文本型字段,尽可能不使用null属性,因为当使用默认值null时,数据库中就可能出现两种空数据:NULL和空字符串,而Django默认使用空字符串。
blank
默认值为False,当设置Field.blank=True时字段值允许为空。
注意与Field.null属性不同的是,null只是表示数据库值而blank用于表单验证,当字段属性blank=True时,表单验证将允许字段值为空,但是当blank=False时,表单字段将变成必填字段。
choices
属性值为一个可迭代对象,如列表或者元组,迭代对象的每个成员包括两个字符串。当字段设置了choices属性时,字段在网页中将会以下拉列表的形式显示。
列表或元组的第一个值将作为字段值保存到数据库中,第二个值用于提高字段的可读性。
示例1:
YEAR_IN_SCHOOL_CHOICES = {
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
}
year_in_school = models.CharField(
max_length = 2,
choices=YEAR_IN_SCHOOL_CHOICES,
default = 'Freshman',
)
显示效果如图所示。
示例2:
# www.coolcou.com
MEDIA_CHOICES = {
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)),
('unknown', 'Unknown'),
}
group_choice_field = models.CharField(
max_length=2,
choices=MEDIA_CHOICES,
default='Audio',
)
显示效果如图所示。
示例3:
修改示例2,设置字段blank属性为True:
group_choice_field = models.CharField(
max_length=2,
choices=MEDIA_CHOICES,
default='Audio',
blank=True,
)
显示效果如图所示。
示例4:
修改示例2,在元素MEDIA_CHOICES中添加成员(None, ‘Please Select Media’):
MEDIA_CHOICES = {
(None, 'Please Select Media'),
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)),
('unknown', 'Unknown'),
}
显示效果如图所示。
default
设置字段默认值。属性值可以是字符串也可以是方法。默认值不可以是可变对象,如列表。
help_text
HTML元素的提示文本,在文本中可以使用HTML标记。
示例:
help_text = "Please select your <em>favorite</em> media"
显示效果如图所示。
primary_key
将字段设置为数据表主键。如果模型中任何字段都不包含primary_key=True属性,Django将会自动为模型添加一个IntegerField字段作为主键。
主键永远是只读的,当修改一个模型对象的主键后,如果保存将会在数据库中创建一个新对象。
unique
当字段的unique属性设置为True时,该字段的所有值在整张数据表中不能重复,每一行数据都必须有唯一的字段值。
verbose_name
verbose_name属性类似于字段的说明。
除了ForeignKey、ManyToManyField、OneToOneField三种字段类型外,其他字段类型都包含一个默认的verbose_name属性,可以直接在字段属性列表的第一位输入文本作为verbose_name属性值。如果没有给出verbose_name属性,Django会使用字段名作为verbose_ name值,如果字段名中包含下画线时,下画线会被转换为空格。
ForeignKey、ManyToManyField、OneToOneField三种字段类型要求第一个参数必须是模型类,因此必须使用verbose_name关键字。
示例:
date_field = models.DateField('This is publish day', default=datetime.datetime.now())
key = models.ForeignKey(Question, verbose_name='Foreign key')
酷客教程相关文章:
评论前必须登录!
注册