字段选项
下面的参数都是可用的并且是可选的:
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工作的细节
摘抄自 原链接