一、字段名

字段名

类型

参数

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 字段的更多相关文章

  1. Django model字段类型清单

    转载:<Django model字段类型清单> Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField ...

  2. odoo Model字段的参数

    odoo Model字段的参数 class Field(object): """ The field descriptor contains the field defi ...

  3. Django model 字段类型及选项解析---转载

    model field 类型1.AutoField() 自增的IntegerField,通常不用自己设置,若没有设置主键,Django会自动添加它为主键字段,Django会自动给每张表添加一个自增的p ...

  4. url分发、isinstance、request.GET请求之QueryDict和urlencode、post和get请求、limit_choices_to(Model字段)

    这个的路径是怎么来的,是有一个个的url路由分发过来的 这两个是相等的,若url后面加括号了,那么前面就不用这个装饰器了:反之,若装饰器使用了,那么这个url后面就不要加括号了 eg:其他的views ...

  5. django中model字段与属性

    model field 类型1.AutoField     一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntege ...

  6. django【ORM】model字段类型

    1.AutoField 一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key. 2.BigIntegerField 64位整数, -922 ...

  7. Django model 字段类型清单

    Django model字段类型清单 Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField 一个自动递增的整型字 ...

  8. model字段对象和forms字段对象的区别和联系

    一.model字段对象 (一)_meta _meta是django.db.models.options.Options的实例,获取字段对象可通过模型类来进行获取,而_meta可提供如下功能: 获取模型 ...

  9. django的model字段在保存的时候做预处理怎么办?

    django的model字段在保存的时候做预处理怎么办? 比如这个model: class Book(Model): publish_date = DateField() 但是在保存时,用户输入数据是 ...

随机推荐

  1. 洛谷 P3825 [NOI2017]游戏 【2-SAT+状压】

    UOJ和洛谷上能A,bzoj 8ms即WA,现在也不是知道为啥--因为我太弱了 先看数据范围发现d非常小,自然想到了状压. 所以先假装都是只能跑两种车的,这显然就是个2-SAT问题了:对于x场没有hx ...

  2. Deribit交易所 websocket API 连接范例

    Deribit websocket API 连接范例,使用JavaScript语言,策略运行在FMZ发明者量化平台. 源码地址:https://www.fmz.com/strategy/147765 ...

  3. POJ 2234 Nim博弈

    思路: nim博弈裸题 xor一下 //By SiriusRen #include <cstdio> using namespace std; int n,tmp,xx; int main ...

  4. 小心我“DIR”溢出你!

    转自https://blog.csdn.net/wql19881207/article/details/6300760 https://blog.csdn.net/wql19881207/articl ...

  5. The Fewest Coins POJ - 3260

    The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...

  6. ACM_数数?诶?这么简单?

    数数?诶?这么简单? Time Limit: 2000/1000ms (Java/Others) Problem Description: 当看到GDUFE-GAME宣传海报上提到"场内人员 ...

  7. linux系统添加java和glassfish环境变量

    第一种方法: 可以在/etc/profile里面增加 #java环境变量 JAVA_HOME=/home/harries/develop/jdk1.6.0_23export JRE_HOME=/hom ...

  8. ambari集群里如何正确删除历史修改记录(图文详解)

    不多说,直接上干货! 答:这些你想删除的话得得去数据库里删除,最好别删除 .  现在默认就是使用好的配置               欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智 ...

  9. ADO.net增删改的使用

    添加数据 -------------------------------------------------- //让用户输入要添加的内容 Console.WriteLine("请输入要添加 ...

  10. node入门(一)——安装

    node可以让我们用js写服务器.此外还可以用来前端自动化开发,它找到特定服务要使用的包,然后下载.安装.管理. 首先安装node,进入官网下载需要的node版本,然后一键式傻瓜安装.(我的环境是wi ...