欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Django 常用字段和参数

程序员文章站 2022-03-26 13:29:34
一.ORM字段 | 类型 | 说明 | | | | | AutoField | 一个自动增加的整数类型字段。通常你不需要自己编写它,Django会自动帮你添加字段:\ ,这是一个自增字段,从1开始计数。如果你非要自己设置主键,那么请务必将字段设置为\ 。Django在一个模型中只允许有一个自增字段, ......

一.orm字段

类型 说明
autofield 一个自动增加的整数类型字段。通常你不需要自己编写它,django会自动帮你添加字段:`id = models.autofield(primary_key=true)`,这是一个自增字段,从1开始计数。如果你非要自己设置主键,那么请务必将字段设置为`primary_key=true。django在一个模型中只允许有一个自增字段,并且该字段必须为主键! | | bigautofield | (1.10新增)64位整数类型自增字段,数字范围更大,从1到9223372036854775807 | | bigintegerfield | 64位整数字段(看清楚,非自增),类似integerfield ,-9223372036854775808 到9223372036854775807。在django的模板表单里体现为一个textinput标签。 | | binaryfield | 二进制数据类型。使用受限,少用。 | | **booleanfield** | 布尔值类型。默认值是none。在html表单中体现为checkboxinput标签。如果要接收null值,请使用nullbooleanfield。 | | **charfield** | 字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。默认的表单标签是input text。最常用的filed,没有之一! | | commaseparatedintegerfield | 逗号分隔的整数类型。必须接收一个max_length参数。常用于表示较大的金额数目,例如1,000,000元。 | | **datefield** | \class datefield(auto_now=false, auto_now_add=false, options)`日期类型。一个python中的datetime.date的实例。在html中表现为textinput标签。在admin后台中,django会帮你自动添加一个js的日历表和一个“today”快捷方式,以及附加的日期合法性验证。两个重要参数:(参数互斥,不能共存)`auto_now`:每当对象被保存时将字段设为当前日期,常用于保存最后修改时间。`auto_now_add`:每当对象被创建时,设为当前日期,常用于保存创建日期(注意,它是不可修改的)。设置上面两个参数就相当于给field添加了`editable=false`和`blank=true`属性。如果想具有修改属性,请用default参数。例子:`pub_time = models.datefield(auto_now_add=true),自动添加发布时间。 | | datetimefield | 日期时间类型。python的datetime.datetime的实例。与datefield相比就是多了小时、分和秒的显示,其它功能、参数、用法、默认值等等都一样。 | | decimalfield | 固定精度的十进制小数。相当于python的decimal实例,必须提供两个指定的参数!参数\max_digits`:最大的位数,必须大于或等于小数点位数 。`decimal_places`:小数点位数,精度。 当`localize=false`时,它在html表现为numberinput标签,否则是text类型。例子:储存最大不超过999,带有2位小数位精度的数,定义如下:`models.decimalfield(..., max_digits=5, decimal_places=2)。 | | durationfield | 持续时间类型。存储一定期间的时间长度。类似python中的timedelta。在不同的数据库实现中有不同的表示方法。常用于进行时间之间的加减运算。但是小心了,这里有坑,postgresql等数据库之间有兼容性问题! | | **emailfield** | 邮箱类型,默认max_length最大长度254位。使用这个字段的好处是,可以使用django内置的emailvalidator进行邮箱地址合法性验证。 | | **filefield** | \class filefield(upload_to=none, max_length=100, options)上传文件类型,后面单独介绍。 | | filepathfield | 文件路径类型,后面单独介绍 | | floatfield | 浮点数类型,参考整数类型 | | **imagefield** | 图像类型,后面单独介绍。 | | **integerfield** | 整数类型,最常用的字段之一。取值范围-2147483648到2147483647。在html中表现为numberinput标签。 | | **genericipaddressfield** | \class genericipaddressfield(protocol='both', unpack_ipv4=false, **options)[source]`,ipv4或者ipv6地址,字符串形式,例如`192.0.2.30或者2a02:42fe::4`在html中表现为textinput标签。参数`protocol默认值为‘both’,可选‘ipv4’或者‘ipv6’,表示你的ip地址类型。 | | nullbooleanfield | 类似布尔字段,只不过额外允许\null`作为选项之一。
positiveintegerfield 正整数字段,包含0,最大2147483647。
positivesmallintegerfield 较小的正整数字段,从0到32767。
slugfield slug是一个新闻行业的术语。一个slug就是一个某种东西的简短标签,包含字母、数字、下划线或者连接线,通常用于urls中。可以设置max_length参数,默认为50。
smallintegerfield 小整数,包含-32768到32767。
textfield 大量文本内容,在html中表现为textarea标签,最常用的字段类型之一!如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。只有charfield才能同时作用于两者。
timefield 时间字段,python中datetime.time的实例。接收同datefield一样的参数,只作用于小时、分和秒。
urlfield 一个用于保存url地址的字符串类型,默认最大长度200。
uuidfield 用于保存通用唯一识别码(universally unique identifier)的字段。使用python的uuid类。在postgresql数据库中保存为uuid类型,其它数据库中为char(32)。这个字段是自增主键的最佳替代品,后面有例子展示。

orm字段与数据库实际字段的对应关系

'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)',

二.orm字段参数

null:用于表示某个字段可以为空
unique:如果设置为unique=true 则该字段在此表中必须是唯一的
db_index:如果db_index=true则代表着为此字段设置索引
default:为该字段设置默认值

datefield和datetimefield

auto_now_add:配置auto_now_add=true,创建数据记录的适合会把当前时间添加到数据库
auto_now:配置auto_now=true,每次更新数据记录的时候会更新该字段

三.关系型字段

1.一对多(foreignkey)

外键类型在orm中用来表示外键关联关系,一般把foreignkey字段设置在一对多关系中'多'的那一方。

foreignkey可以和其他表做关联关系同时也可以和自身做关联关系

参数:

to:设置要关联的表
to_field:设置要关联的表的字段
related_name:反向操作时,使用的字段名,用于代替反向查询时的"表名_set"
related_query_name:反向查询操作时,使用的连接前缀,用于替换表名
on_delete:当删除关联表中的数据时,当前表与其关联的行为
    参数值:
    models.cascade:表示删除关联数据,与之关联也删除
    models.do_nothing:表示删除关联数据,什么也不做
    models.protect:删除关联数据,引发错误protectederror
    models.set_default:将外键字段设为默认值,只有当字段设置了默认值,才能使用
    models.set_null:将外键字段设为null,只有当字段设置了null=true时,才能使用
db_constraint:是否在数据库中创建外键约束,默认为true

2.一对一(onetoonefield)

一对一关系非常类似具有unique=true属性的外键关系,但是反向关联对象只有一个,这种关系类型多数用于当一个模型需要从别的模型扩展而来的情况.

该关系的第一位置参数为关联的模型,用法和前面的一对多类似

to:设置要关联的表
to_field:设置要关联的表的字段
on_delete:同foreignkey

3.多对多(manytomanyfield)

多对多关系在数据库中也是非常常见的关系类型,多对多的字段可以定义在任何一方.

to:设置要关联的表
related_name:同foreignkey
related_query_name:同foreignkey
symmetrical:仅用于多对多自关联时,指定内部是否创建反向操作的字段,默认为true
through:在使用manytomanyfield字段时,django将自动生成一张表来管理多对多的关联关系,但我们也可以手动创建第三张表来管理多对多关系,此时就需要通过through来指定第三张表的表名
through_fields:设置关联的字段
db_table:默认创建第三张表时,数据库中表的名称

四.元信息

orm对应的类里面包含另一个meta类,而meta类封装了一些数据库的信息,主要字段有:
db_table:orm在数据库中的表名默认是app_类名,可以通过db_table来设置
index_together:联合索引
unique_together:联合唯一索引
ordering:指定默认按什么字段排序