4.model 字段
一、字段名
| 
 字段名  | 
 类型  | 
 参数  | 
| 
 AutoField(Field)  | 
 - int自增列,  | 
 必须填入参数 primary_key=True  | 
| 
 BigAutoField(AutoField)  | 
 - bigint自增列  | 
 必须填入参数 primary_key=True  | 
| 
 SmallIntegerField(IntegerField):  | 
 SmallIntegerField(IntegerField):  | 
|
| 
 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)  | 
 - 正小整数 0 ~ 32767  | 
|
| 
 IntegerField(Field)  | 
 - 整数列(有符号的) -2147483648 ~ 2147483647  | 
|
| 
 PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)  | 
 - 正整数 0 ~ 2147483647  | 
|
| 
 BigIntegerField(IntegerField):  | 
 - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807  | 
|
| 
 BooleanField(Field)  | 
 - 布尔值类型  | 
|
| 
 NullBooleanField(Field):  | 
 - 可以为空的布尔值  | 
|
| 
 CharField(Field)  | 
 - 字符类型  | 
 - 必须提供max_length参数, max_length表示字符长度  | 
| 
 TextField(Field)  | 
 - 文本类型  | 
|
| 
 EmailField(CharField):  | 
 - 字符串类型,Django Admin以及ModelForm中提供验证机制  | 
|
| 
 GenericIPAddressField(Field)  | 
 - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6  | 
 - 参数: protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6" unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1, 开启刺功能,需要protocol="both"  | 
| 
 URLField(CharField)  | 
 - 字符串类型,Django Admin以及ModelForm中提供验证 URL  | 
|
| 
 SlugField(CharField)  | 
 - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)  | 
|
| 
 CommaSeparatedIntegerField(CharField)  | 
 - 字符串类型,格式必须为逗号分割的数字  | 
|
| 
 UUIDField(Field)  | 
 - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证  | 
|
| 
 FilePathField(Field)  | 
 - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能  | 
 - 参数: path, 文件夹路径 , match=None, 正则匹配 recursive=False, 递归下面的文件夹 allow_files=True, 允许文件 allow_folders=False, 允许文件夹  | 
| 
 FileField(Field)  | 
 - 字符串,路径保存在数据库,文件上传到指定目录  | 
 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage  | 
| 
 ImageField(FileField)  | 
 - 字符串,路径保存在数据库,文件上传到指定目录  | 
 - 参数: upload_to = "" 上传文件的保存路径 storage = None 存储组件,默认django.core.files.storage.FileSystemStorage width_field=None, 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名(字符串)  | 
| 
 DateTimeField(DateField)  | 
 - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]  | 
|
| 
 DateField(DateTimeCheckMixin, Field)  | 
 - 日期格式 YYYY-MM-DD  | 
|
| 
 TimeField(DateTimeCheckMixin, Field)  | 
 - 时间格式 HH:MM[:ss[.uuuuuu]]  | 
|
| 
 DurationField(Field)  | 
 - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型  | 
|
| 
 FloatField(Field)  | 
 - 浮点型  | 
|
| 
 DecimalField(Field)  | 
 - 10进制小数  | 
 - 参数: max_digits,小数总长度 decimal_places,小数位长度  | 
| 
 BinaryField(Field)  | 
 - 二进制类型  | 
注:当model中如果没有自增列,则自动会创建一个列名为id的列,自增列必须为主键,因为mysql一张表中只能有一个自增列。英文详解如下:
| 
 'AutoField'  | 
 'integer AUTO_INCREMENT',  | 
| 
 'BigAutoField'  | 
 'bigint AUTO_INCREMENT',  | 
| 
 'BinaryField'  | 
 'longblob',  | 
| 
 'BooleanField'  | 
 'bool',  | 
| 
 'CharField'  | 
 'varchar(%(max_length)s)',  | 
| 
 'CommaSeparatedIntegerField'  | 
 'varchar(%(max_length)s)',  | 
| 
 'DateField'  | 
 'date',  | 
| 
 'DateTimeField'  | 
 'datetime',  | 
| 
 'DecimalField'  | 
 'numeric(%(max_digits)s, %(decimal_places)s)',  | 
| 
 'DurationField'  | 
 'bigint',  | 
| 
 'FileField'  | 
 'varchar(%(max_length)s)',  | 
| 
 'FilePathField'  | 
 'varchar(%(max_length)s)',  | 
| 
 'FloatField'  | 
 'double precision',  | 
| 
 'IntegerField'  | 
 'integer',  | 
| 
 'BigIntegerField'  | 
 'bigint',  | 
| 
 'IPAddressField'  | 
 'char(15)',  | 
| 
 'GenericIPAddressField'  | 
 'char(39)',  | 
| 
 'NullBooleanField'  | 
 'bool',  | 
| 
 'OneToOneField'  | 
 'integer',  | 
| 
 'PositiveIntegerField'  | 
 'integer UNSIGNED',  | 
| 
 'PositiveSmallIntegerField'  | 
 'smallint UNSIGNED',  | 
| 
 'SlugField'  | 
 'varchar(%(max_length)s)',  | 
| 
 'SmallIntegerField'  | 
 'smallint',  | 
| 
 'TextField'  | 
 'longtext',  | 
| 
 'TimeField'  | 
 'time',  | 
| 
 'UUIDField'  | 
 'char(32)',  | 
二、字段中常用参数
null 数据库中字段是否可以为空,注意和blank比较
db_column 数据库中字段的列名
db_tablespace
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键
db_index 数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引
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 EmailValidator
from django.core.validators import RegexValidator
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'), ])
三、Meta信息:
class Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table = "table_name"
# 联合索引
index_together = [("pub_date", "deadline"), ]
# 联合唯一索引
unique_together = (("driver", "restaurant"),)
# admin中显示的表名称
verbose_name = "用名信息"
# verbose_name加s。admin中复数形式
verbose_name_plural = verbose_name
#定义排序规
ordering = "-object_id" #通过object_id做到许排序。
四、model字段格式检查
1、触发Model中的验证和错误提示
(1)Django Admin中的错误信息会优先根据Admin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息
#model.py文件中
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32)
email = models.EmailField(error_messages={'invalid': '格式错了.'})
这样就会提示格式错误
(2)调用Model对象的 clean_fields 方法
# views.py
def index(request):
obj = models.UserInfo(username='11234', email='uu')
try:
print(obj.clean_fields())
except Exception as e:
print(e)
return HttpResponse('ok')
# Model的clean方法是一个钩子,可用于定制操作,如:上述的异常处理。
(3)Admin中修改错误提示,(也即是用django的form方法)
from django import forms
from django.contrib import admin
from model_club import models
class UserInfoForm(forms.ModelForm):
username = forms.CharField(error_messages={'required': '用户名不能为空.'})
email = forms.EmailField(error_messages={'invalid': '邮箱格式错误.'})
age = forms.IntegerField(initial=1, error_messages={'required': '请输入数值.', 'invalid': '年龄必须为数值.'})
class Meta:
model = models.UserInfo
# fields = ('username',)
fields = "__all__"
class UserInfoAdmin(admin.ModelAdmin):
form = UserInfoForm
admin.site.register(models.UserInfo, UserInfoAdmin)
4.model 字段的更多相关文章
- Django model字段类型清单
		
转载:<Django model字段类型清单> Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField ...
 - odoo Model字段的参数
		
odoo Model字段的参数 class Field(object): """ The field descriptor contains the field defi ...
 - Django model 字段类型及选项解析---转载
		
model field 类型1.AutoField() 自增的IntegerField,通常不用自己设置,若没有设置主键,Django会自动添加它为主键字段,Django会自动给每张表添加一个自增的p ...
 - url分发、isinstance、request.GET请求之QueryDict和urlencode、post和get请求、limit_choices_to(Model字段)
		
这个的路径是怎么来的,是有一个个的url路由分发过来的 这两个是相等的,若url后面加括号了,那么前面就不用这个装饰器了:反之,若装饰器使用了,那么这个url后面就不要加括号了 eg:其他的views ...
 - django中model字段与属性
		
model field 类型1.AutoField 一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntege ...
 - django【ORM】model字段类型
		
1.AutoField 一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntegerField 64位整数, -922 ...
 - Django model 字段类型清单
		
Django model字段类型清单 Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField 一个自动递增的整型字 ...
 - model字段对象和forms字段对象的区别和联系
		
一.model字段对象 (一)_meta _meta是django.db.models.options.Options的实例,获取字段对象可通过模型类来进行获取,而_meta可提供如下功能: 获取模型 ...
 - django的model字段在保存的时候做预处理怎么办?
		
django的model字段在保存的时候做预处理怎么办? 比如这个model: class Book(Model): publish_date = DateField() 但是在保存时,用户输入数据是 ...
 
随机推荐
- Unity优化总览
			
CPU GC 序列化与反序列化,如protobuff,json解析 String的频繁构造,拼接,如ToString()会生成字符串,Object.name会返回拷贝 闭包和匿名函数,在闭包中调用外部 ...
 - 洛谷 P3952 时间复杂度【模拟】
			
把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...
 - 51nod 1227 平均最小公倍数【欧拉函数+杜教筛】
			
以后这种题能用phi的就不要用mu-mu往往会带着个ln然后被卡常致死 把题目要求转换为前缀和相减的形式,写出来大概是要求这样一个式子: \[ \sum_{i=1}^{n}\sum_{j=1}^{i} ...
 - bzoj 4817: [Sdoi2017]树点涂色【树链剖分+LCT】
			
非常妙的一道题. 首先对于操作一"把点x到根节点的路径上所有的点染上一种没有用过的新颜色",长得是不是有点像LCT中的access操作?进而发现,如果把同一颜色的点连起来作为LCT ...
 - C# 读写text 详细讲解
			
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> & ...
 - 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO
			
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
 - Poj 3189 Steady Cow Assignment (多重匹配)
			
题目链接: Poj 3189 Steady Cow Assignment 题目描述: 有n头奶牛,m个棚,每个奶牛对每个棚都有一个喜爱程度.当然啦,棚子也是有脾气的,并不是奶牛想住进来就住进来,超出棚 ...
 - (二)python高级特性
			
一.切片 >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python ...
 - 2017 JUST Programming Contest 3.0  H. Eyad and Math
			
H. Eyad and Math time limit per test 2.0 s memory limit per test 256 MB input standard input output ...
 - 洛谷 P1816 忠诚
			
https://www.luogu.org/problemnew/show/1816 st表模板 #include<cstdio> #include<algorithm> us ...