今天看到一篇博客感觉写的非常详细,就转载了j_0019.gif

因为我英文实在太差 应该有很多翻译不通顺或者理解有误的地方 希望大家指正面

字段选项

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

  • 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工作的细节