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:
1
2
3
4
5
6
7
8
9
courses_list_choices1 = (
('Physics', '物理'),
('Chemistry', '化学'),
('Biology', '生物'),
('Politics', '政治'),
('History', '历史'),
('Geography', '地理')
)
subject1 = models.CharField(max_length=25, verbose_name='科目1', default='Biology', choices=courses_list_choices1)

显示效果如下:

1564638319473

示例2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
courses_list_choices2 = (
('理科', (
('Physics', '物理'),
('Chemistry', '化学'),
('Biology', '生物')
)
),
('文科', (
('Politics', '政治'),
('History', '历史'),
('Geography', '地理')
)
)
)
subject2 = models.CharField(max_length=25, verbose_name='科目2', default='History', choices=courses_list_choices2)

显示效果如下:

1564638790307

示例3:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
courses_list_choices2 = (
('理科', (
('Physics', '物理'),
('Chemistry', '化学'),
('Biology', '生物')
)
),
('文科', (
('Politics', '政治'),
('History', '历史'),
('Geography', '地理')
)
)
)
subject3 = models.CharField(max_length=25, verbose_name='科目3', default='History', choices=courses_list_choices2, blank=True)

显示效果如下:

1564638906619

示例4:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
courses_list_choices4 = (
(None, '请选择一门学科'),
('理科', (
('Physics', '物理'),
('Chemistry', '化学'),
('Biology', '生物')
)
),
('文科', (
('Politics', '政治'),
('History', '历史'),
('Geography', '地理')
)
),
('unknown', 'Unknown')
)
subject34 = models.CharField(max_length=25, verbose_name='科目4', default='History', choices=courses_list_choices4)

显示效果如下:

1564638990530

default

设置字段默认值。属性值可以是字符串也可以是方法。默认值不可以是可变对象,如列表。

help_text

HTML 元素的提示文本,在文本中可以使用HTML 标记。

示例:
1
name = models.CharField(max_length=35, verbose_name='名称', help_text='姓名长度不能超过10', default='张三丰')

效果如下:

1564639301127

primary_key

将字段设置为数据表主键。如果模型中任何字段都不包含primary_key= True 属性,Django 将会自动为模型添加一个IntegerField 字段作为主键。
主键永远是只读的,当修改一个模型对象的主键后,如果保存将会在数据库中创建一个新对象。

unique

当宇段的unique 属性设置为True 时,该字段的所有值在整张数据表中不能重复,每一行数据’都必须有唯一的字段值。

verbose_name

verbose_name 属性类似于字段的说明。
除了ForeignKeyManyToManyFieldOneToOneField 三种字段类型外,其他宇段类型都包含一个默认的verbose_name属性,可以直接在字段属性列表的第一位输入文本作为verbose_name 属性值。如果没有给出verbose_name 属性, Django 会使用字段名作为verbose_name值,如果字段名中包含下画线时\下面线会被转换为空格。
ForeignKeyManyToManyFieldOneToOneField 三种字段类型要求第一个参数必须是模型类,因此必须使用verbose_name关键字。
示例