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() 但是在保存时,用户输入数据是 ...
随机推荐
- bzoj 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草【区间dp】
挺好的区间dp,状态设计很好玩 一开始按套路设f[i][j],g[i][j]为吃完(i,j)区间站在i/j的最小腐败值,后来发现这样并不能保证最优 实际上是设f[i][j],g[i][j]为从i开始吃 ...
- bzoj 1911: [Apio2010]特别行动队【斜率优化dp】
仔细想想好像没学过斜率优化.. 很容易推出状态转移方程\( f[i]=max{f[j]+a(s[i]-s[j])^2+b(s[i]-s[j])+c} \) 然后考虑j的选取,如果选j优于选k,那么: ...
- Luogu P1122最大子树和 【水树形Dp】By cellur925
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
- SpringMVC分页查询无法直接将对象转换成json的解决办法(报org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type:错)
在用ajax获得分页数据时,无法将获取的值赋值给input标签,在修改用户信息时不显示用户已经注册的信息,百度可知 springmvc处理分页数据返回的对象时,无法直接将对象转换成json,会报org ...
- c语言程序设计案例教程(第2版)笔记(二)—函数、递归
零散知识点 模块化:将一个问题分解成若干个子问题的过程成为模块化. 模块化的优点:不但可以将一个复杂的问题分解成几个相对简单的问题:还可以提高程序代码的重用性. 函数:函数是构成C程序的基本单位.函数 ...
- 12c debug 转 12C 连接CDB和PDB
来源:David Dai -- Focus on Oracle 连接到CDB 12c debug 和普通实例一样的连接. 指定ORACLE_SID 以后可以使用OS认证,也可以使用密码进行连接. [o ...
- scala学习笔记4:函数和闭包
以下主要记录的是看完scala in programming这本书functions and closures(第八章)后的要点总结. 1,函数可以存在的地方:函数方法,嵌套函数. 2,关于funct ...
- ECMAScript6之箭头函数
2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015. 函数作为js语言中的一等公民.自然Es6中推出的箭头函数(=>)也是备受瞩目的.那我们接下来看下传 ...
- Windows 下 IIS与Apache 共存
在Windows服务器下, 安装了IIS以及Apache服务器, 如何使他们一起工作. 目前我面对的问题是, 只有一个IP地址,要通过不同的端口来访问不同的程序. 解决方案如下: 1.找到 Apach ...
- 手动配置wamp环境(1)--apache安装与基本操作
Apache服务器简介: Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一. 安装apac ...