字段选项
一、说明
所有的模型字段都可以接收一定数量的参数,比如CharField至少需要一个max_length参数。下面的这些参数是所有字段都可以使用的,并且是可选的。
二、数据库相关
1、null
-
说明
该值为True时,Django在数据库可以NULL保存空值。默认值为False。对于保存字符串类型数据的字段,请尽量避免将此参数设为True,那样会导致两种‘没有数据’的情况,一种是NULL,另一种是‘空字符串’。
-
示例代码
class User(models.Model): # 介绍 text = models.CharField(max_length=255, null=True)
3、db_column
-
说明
该参数用于定义当前字段在数据表内的列名。如果未指定,Django将使用字段名作为列名
-
示例代码
class UserInfo(models.Model): # 自定义主键 uid = models.AutoField('主键', primary_key=True) # 用户名 username = models.CharField('用户名', db_column='name', max_length=64) password = models.CharField('密码', db_column='pwd', max_length=64)
-
示例图
5、db_index
-
说明
该参数接收布尔值。如果为True,数据库将为该字段创建普通索引。
-
示例代码
class UserInfo(models.Model): username = models.CharField(max_length=64, db_index=True)
-
示例图
6、default
-
说明
字段的默认值,可以是值或者一个可调用对象。如果是可调用对象,那么每次创建新对象时都会调用。设置的默认值不能是一个可变对象,比如列表、集合等等。lambda匿名函数也不可用于default的调用对象,因为匿名函数不能被migrations序列化。
-
注意
在某种原因不明的情况下将default设置为None,可能会引发
intergyerror:not null constraint failed
,即非空约束失败异常,导致python manage.py migrate
失败,此时可将None改为False或其它的值,只要不是None就行
7、unique
-
说明
设为True时,数据库中字段建立唯一索引
-
注意:
- 对于ManyToManyField和OneToOneField关系类型,该参数无效。
- 当unique=True时,db_index参数无须设置,因为unqiue隐含了索引。
- 自1.11版本后,unique参数可以用于FileField字段。
-
示例代码
class UserInfo(models.Model): username = models.CharField('用户名', db_column='name', max_length=64, unique=True)
-
示例图
三、 Admin后台相关
1、verbose_name
-
说明
Admin中显示的字段名称。为字段设置一个人类可读,更加直观的别名。
对于每一个字段类型,除了
ForeignKey
、ManyToManyField
和OneToOneField
这三个特殊的关系类型,其第一可选位置参数都是verbose_name
。如果没指定这个参数,Django会利用字段的属性名自动创建它,并将下划线转换为空格。 -
示例代码
class UserInfo(models.Model): # 自定义主键 uid = models.AutoField('主键', primary_key=True) # 用户名 username = models.CharField('用户名', max_length=64) password = models.CharField('密码', max_length=32)
2、choices
-
说明
Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
用于页面上的选择框标签,需要先提供一个二维的二元元组,第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值
-
示例代码
class UserInfo(models.Model): SEX_CHOICES = ( ('1', u'男'), ('2', u'女'), ) sex = models.CharField(max_length=1, choices=SEX_CHOICES)
3、blank
-
说明
Admin中是否允许用户输入为空
True时,字段可以为空。默认False。和null参数不同的是,null是纯数据库层面的,而blank是验证相关的,它与表单验证是否允许输入框内为空有关,与数据库无关。所以要小心一个null为False,blank为True的字段接收到一个空值可能会出bug或异常。
-
示例代码
class UserInfo(models.Model): # 自定义主键 uid = models.AutoField('主键', primary_key=True) # 用户名 username = models.CharField('用户名', max_length=64) password = models.CharField('密码', max_length=32)
4、editable
-
说明
Admin中是否可以编辑
-
示例代码
class UserInfo(models.Model): create_date = models.DateTimeField('注册时间', auto_now_add=True, editable=True)
5、help_text
-
说明
Admin中该字段的提示信息
-
示例代码
class UserInfo(models.Model): create_date = models.DateTimeField('注册时间', auto_now_add=True, editable=True,help_text='填写注册时间')
6、error_messages
-
说明
自定义错误信息(字典类型),从而定制想要显示的错误信息
字典健:null, blank, invalid, invalid_choice, unique等
-
示例代码
{'null': "不能为空.", 'invalid': '格式错误'}
7、validators
-
说明
自定义错误验证(列表类型),从而定制想要的验证规则
-
示例代码
from django.core.validators import RegexValidator from django.core.validators import EmailValidator, URLValidator, DecimalValidator, MaxLengthValidator, MinLengthValidator, MaxValueValidator, MinValueValidator test = models.CharField( max_length=32, error_messages={ 'error1': '错误信息1', 'error2': '错误信息2', 'error3': '错误信息3', }, validators=[ RegexValidator(regex='\d+', message='错误了', code='error1'), RegexValidator(regex='\d+', message='又错误了', code='error2'), EmailValidator(message='又错误了', code='error3'), ] )