一、前言
之前我们讲了Djngao的ORM的字段的类型,分为 字符串型,数字型,时间型,二进制型等等,今天我们来讲讲django的orm的字段的参数介绍。
二、整体的字段参数列表
null 数据库中字段是否可以为空
db_column 数据库中字段的列名
db_tablespace
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键
db_index 数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引
auto_now_add 更新时,自动更新为当前时间,一般用于create_time
auto_now 创建时,自动生成时间,用于update_time
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'}
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={
'c1': '优先错信息1',
'c2': '优先错信息2',
'c3': '优先错信息3',
},
validators=[
RegexValidator(regex='root_\d+', message='错误了', code='c1'),
RegexValidator(regex='root_112233\d+', message='又错误了', code='c2'),
EmailValidator(message='又错误了', code='c3'), ]
)
三、参数字段的详细介绍
前提:在modles.py里面的数据库操作之后,必须在终端依次执行如下命令:
python manage.py makemigrations #生成init.py的文件
python manage.py migrate #把init.py的文件在数据库生成表结构
3.1、null
说明:db是否可以为空
class UserInfo(models.Model):
username = models.CharField(max_length=32,null=True) #表示在db中数据可以为空
3.2、default
说明:默认值
class UserInfo(models.Model):
username = models.CharField(max_length=32,default="zhangqigao") #字段生成的默认值为"zhangqigao"
password = models.CharField(max_length=60)
3.3、primary_key
说明:主键
class UserGroup(models.Model):
uid = models.AutoField(primary_key=True) #设置主键
groupname = models.CharField(max_length=32)
3.4、db_column
说明:设置列名
class UserInfo(models.Model):
username = models.CharField(max_length=32,db_column="user_name") #把列名设置为user_name
password = models.CharField(max_length=60)
效果如图:
3.5、db_index
说明:设置普通索引
class UserInfo(models.Model):
username = models.CharField(max_length=32,db_index=True) #为这个字段设置一个普通索引
password = models.CharField(max_length=60)
3.6、unique
说明:设置唯一索引
class UserInfo(models.Model):
username = models.CharField(max_length=32,unique=True) #设置唯一索引
password = models.CharField(max_length=60)
3.7、 unique_for_date
说明:只对时间做索引
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
data_time = models.DateTimeField(max_length=10,unique_for_date=True)#只对前面的时间做索引 201611010301012做索引
3.8、 unique_for_month
说明:只对月份做索引
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
data_time = models.DateTimeField(max_length=10,unique_for_month=True)#只对月份做索引
3.9、unique_for_year
说明:只对年份做索引
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
data_time = models.DateTimeField(max_length=10,unique_for_year=True)#只对年份做索引
3.10、auto_now
说明:创建时自动生成,这个用于update_time,更新时间,更新当前表时,会自动创建一个时间。这个你创建的时候不用添加,django自动帮你创建更新时间。
class UserGroup(models.Model):
uid = models.AutoField(primary_key=True)
groupname = models.CharField(max_length=32)
ctime = models.DateTimeField(auto_now_add=True,null=True)
utime = models.DateTimeField(auto_now=True,null=True)#也不需要自己手动添加,django自动帮你创建
django admin显示:
数据库显示:
注意了:如果你用orm的语法,传统语法,这个uptime是不会更新的,只有另外一种方式才会更新:
#uptime不会更新的写法
obj = UserGroup.objects.filter(id=1).update(groupname="qigao")
#会更新的写法
obj = UserGroup.objects.filter(id=1).first()
obj.groupname = "CE0"
obj.save()
3.11、auto_now_add
说明:更新时自动更新为当前时间,这个一般用于create_time,用于创建时间,因为是当前增加的嘛。这个你创建的时候不用添加,django自动帮你创建当前时间。
class UserGroup(models.Model):
uid = models.AutoField(primary_key=True)
groupname = models.CharField(max_length=32)
ctime = models.DateTimeField(auto_now_add=True,null=True) #不需要自己添加,django会自动帮你添加
django admin显示:
数据库显示:
3.11、choices
说明:我们会存一些类型,正常类型是放在数据库里面,但是在这边我们可以不放在数据库里面,我放在内存里面。避免链表查询。
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
#设置用户类型选项
user_type_choices = (
(1,"超级用户"),
(2,"普通用户"),
(3,"访客"),
)
user_type_id = models.IntegerField(choices=user_type_choices,default=1) #把用户类型存在user_type_id字段中,默认值为1
在django中显示中文:
3.12、blank
说明:在django admin是否可以为空
class UserInfo(models.Model):
username = models.CharField(max_length=32,blank=True) #在django admin中可以为空
password = models.CharField(max_length=60)
如图:
3.13、verbose_name
说明:django admin中给字段取一个别名,比如取一个中文名
class UserInfo(models.Model):
username = models.CharField(max_length=32,verbose_name="用户名") #取一个别名
password = models.CharField(max_length=60)
django后台显示:
3.14、editable
说明:django后台的字段是否可以编辑
class UserInfo(models.Model):
username = models.CharField(max_length=32,editable=False) #表示不可编辑,默认是True,不可编辑,django admin 后台直接不显示
password = models.CharField(max_length=60)
django admin的后台显示,直接不显示了:
3.15、error_messages
说明:错误信息
class UserInfo(models.Model):
username = models.CharField(max_length=32,error_messages={'null': "不能为空.", 'invalid': '格式错误'})
password = models.CharField(max_length=60)
3.16、help_text
说明:django admin提示,就是帮助信息
class UserInfo(models.Model):
username = models.CharField(max_length=32,help_text="用户名")
password = models.CharField(max_length=60)
django admin 后台显示: