django 数据库ORM参数文档

字段选项

下面的参数都是可用的并且是可选的:

null

如果是True的话 将会存储Null值在数据库 默认是False mysql选项: null
blank

如果为True 则允许字段留空 默认False
choices

2个元组的迭代 用于给字段提供选项
db_columen

数据库字段名 如果不写 将使用 变量名
db_index

如果True 将会给这个字段创建一个索引
db_tablespace

Oracle空间管理上的逻辑单位(略过)
default

字段默认值
editable

如果为False 则admin模块或者其他的 moduelform 表单里不会被显示
error_messages

当字段产生异常活错误的时候设置error_message可以让你覆盖默认的提示
help_text

在form表单显示一个帮助文本 它是一个非常有用的文档 即使这个字段不被应用在表单上
primary_key

如果True 这个字段为主键
unique

如果True 设置这个字段唯一
unique_for_date

关联一个日期类型字段 在这个日期内 字段值不能重复 eg: title字段 设置unique_for_date="pub_date" Django不允许有两个相同记录的title在同一个日期
unique_for_month && unique_for_year

同 unique_for_date
verbose_name

字段定义

给这个字段一个人们理解的注释 如果没有给将会自动使用字段的名称 默认字段的第一个参数 eg: a = charField('verbose_name')
validators

一个表单验证的列表 详见 validators
字段类型
AutoField (**option)

一个自增的数值字段 通常不需要设置 会自动给主键添加在model里
BigIntegerField (**option)

64位的整数 范围在 -9223372036854775808~9223372036854775807 表单默认是是一个文本输入框text input
BooleanField ([**options])

真假字段 表单默认是一个复选框checkbox 如果你接受一个空值 请用 NullBoleanField
CharField (max_length=None[, **options])

字符串字段 如果大小相当于数值 请使用 TextFied 表单默认是text input CharFiedl 有一个额外的必填参数 CharField.max_length 设置字段字符的最大长度 这个max_length会强制的执行数据库级别和django的验证
CommaSeparatedIntegerField (max_length=None[, **options])

由逗号分割的整数 相当于CharField max_length为必填
DateField([auto_now=False, auto_now_add=False, **options])

一个日期 相当于python的 datetime.date 有一些额外的选项
DateField.auto_now 自动的添加在对象每一次保存的时间 始终使用当前时间 不能被更改
DateField.auto_now_add 自动添加对象创建时候的时间 始终使用当前时间 不能被更改
表单默认是一个text input 在admin模块会添加一个日历的js 附加了一个无效日期的错误信息
DateTimeField ([auto_now=False, auto_now_add=False, **options]) 日期和时间的字段 相当于python的 datetime.datetime 和DateField相同的参数

DecimalField (max_digits=None, decimal_places=None[, **options])

精确位数的十进制小数 相当于python的Decimal
DecimalField.max_digits 允许最大的位数 这个数字必须大于等于 decimal_places
DecimalField.decimal_places 位数中包含小数的位数
比如存数一个数字最大999 有两个小数则 max_digits=5, decimal_places=2 表单默认是一个text input
EmailField ([max_length=75, **options])

一个检查输入是否为正确邮箱的CharFiled
FileField (upload_to=None[, max_length=100, **options])

文件字段上传 不支持 primary_key 和 unique 参数 会引起一个 TypeError 错误
FileField.upload_to 一个本地的文件路径将会添加到到你的MEDIA_ROOT设置规定url的值 使用上传的日期和时间作为路径的一部分
FileFiled.storage (选填) 你可以设置自己的存储路径而忽略MEDIA_ROOT的设置
FileField and FieldFile 当你访问一个FileField在一个model里 会给你一个FieldFile实例作为访问底层文件的代理 这个类有专门的属性和方法用于文件的数据交换
FieldFile.url 一个只读的访问文件的相对url的属性通过调用底层Storage类的url()方法
Field.open(mode='rb') 类似 Python open() 方法 打开这个文件的实例用指定的模式(rb)
Field.close() 类似 Python file.close() 方法 关闭和文件相关的实例
Field.save(name, content, save=True) 这个方法需要一个文件名和内容 并将它们传递到stroge类的字段 然后关联存储的文件和model的字段 如果你想手动关联文件和FileField实例在你的model上 save()方法用于保存该文件的数据 需要两个必填的参数 name和content 选填的save参数控制在文件修改后是否保存 默认为True
note: content是django.core.file.File的实例 不是python内建的文件对象 你可以构造一个File从python的文件对象
from django.core.files import File #Open an existing file using Python's built-in open() f = open('/tmp/hello.world') myfile = File(f)

or:
from django.core.files.base import ContentFile myfile = ContentFile("hello world")

FieldFile.deletes ([save=True]) 删除文件关联的实例 清理field所有属性 Note: 当调用delete()时这个文件代开 这个方法将关闭它 可选的save参数控制删除文件后是否保存 默认为True
FilePathField (path=None[, match=None, recursive=False, max_length=100, **options])

一个CharField 选择限定的文件名在文件系统的目标目录 有三个参数 第一个是必填
FilePathField.path(必填) 绝对的系统文件目录路径从FilePathField获得它的选择
FilePathField.match 一个正则表达式作为一个字符串 FilePathField将用它过滤文件名 这个正则表达式只适用于文件名而不是完整的路径
FilePathField.recursive True or False 默认假 指定路径所有子目录都被包含
FilePathField.allow_files 默认True 文件是否包含被指定的位置
FilePathField.allow_folders 默认Flase,文件夹是否包含被指定的位置, allow_folders 和 allow_files 有一个必须是真 当然两个可以一起用 默认FilePathField实例创建varchar(100)
FloatField ([**options])

一个浮点相当于python的float 表单默认是一个TextInput
ImageField (upload_to=None[, height_field=None, width_field=None, max_length=100, **options])

继承FileField的所有属性 但是要验证上传的对象是一个有效的图像 有两个额外的属性width 和 height
mageField.height_field & ImageField.width_field 如果提供着两个参数 图片按照提供的高度和宽度保存 该字段需要Python Imaging库
IntegerField([**options])

整型 默认表单TextInput
IPAddressField([**options])

一个ip地址 字符串格式(e.g. “192.0.2.30”) 默认表单TextInput
GenericIPAddressField([protocol=both, unpack_ipv4=False, **options])

ip4和ip6的地址 字符串格式(e.g. 192.0.2.30 or 2a02:42fe::4) 表单默认TextInput
NullBooleanField([**options])

有点像BooleanField 但是允许Null 可以用BooleanField(null=True)替代
PositiveIntegerField([**options])

和IntegerField类似 但必须是整数或0
PositiveSmallIntegerField([**options])

和PositiveIntegerField类似 但只允许在一定的位数之下
SlugField([max_length=50, **options])

Slug是一个报纸术语 一个slug是一些事情的标签 包含字母 下划线或者连接符 他们通常在url中使用 你可以指定max_length 默认50 设置Field.db_index为True 他是非常有用的自动生成一个SlugField 基于一些其他值的值 你可以自动做这些在admin功能使用prepopulated_fields
SmallIntegerField([**options])

大文本字段 表单默认Textarea
TimeField

一个时间 像Python里的的 datetime.time实例 可以自动生成时间像DateField一样
URLField

一个记录URL的CharField 表单默认 TextInput 如果不指定max_length默认200
数据库字段关系
ForeignKey(othermodel[, **options])

一个多对一的关系 需要提供一个和模型有关的参数
如果你需要创建一个关系在一个还没有被定义的model上 你可以使用model的名字而不是model的对象
class Car(models.Model): manufacturer = models.ForeignKey('Manufacturer') # ... class Manufacturer(models.Model): # ...

参考在另一个应用中的模型 你可以明确的指定一个model和应用程序的名字 如果 Manufacturer Model 定义在production应用里 你需要
class Car(models.Model): manufacturer = models.ForeignKey('production.Manufacturer')

上面这种方式可以很好的解决两个应用互相导入的情况
一个数据库索引被自动的创建在ForeignKey 你可以设置db_index=False禁用它 如果你创建一个 foregin key 是为了一致性而不是为而不是关联(join)你或许是想避免索引的开销 或者你只想想创建一个 alternative index 像一个 partial or multiple column index
Database Representation 参数
ForeignKey 接受一组额外的参数 所有的都是选填 定义了relation工作的细节

摘抄自 原链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容