Django model 字段类型及选项解析

  modelfield类型
 
  1、AutoField()
 
  自增的IntegerField,通常不用自己设置,若没有设置主键,Django会自动添加它为主键字段,Django会自动给每张表添加一个自增的primarykey。
 
  2、BigIntegerField
 
  64位整数,-9223372036854775808到9223372036854775807。默认的显示widget是TextInput.
 
  3、BinaryField(Django1.6版本新增)
 
  存储二进制数据。不能使用filter函数获得QuerySet
 
  4、BooleanField()
 
  True/False,默认的widget是CheckboxInput。
 
  如果需要置空,则必须用NullBooleanField代替。
 
  Django1.6修改:BooleanField的默认值由False改为None,在default属性未设置的情况下。
 
  5、CharField(max_length=none[,**options])
 
  储存字符串。必须有max_length参数指定长度。作用于数据层级和django数据验证层级。默认的formwidget是TextInput如果字符串巨长,推荐使用TextField。
 
  6、CommaSeparatedIntegerField(max_length=none[,**options])
 
  存放由逗号间隔的整数序列。必须有max_length参数。
 
  7、DateField
 
  日期,与python里的datetime.date实例同。有以下几个可选的选项,均为bool类型:
 
  DateField.auto_now:每次执行save操作的时候自动记录当前时间,常作为最近一次修改的时间使用。注意:总是在执行save操作的时候执行,无法覆盖。
 
  DateField.auto_now_add:第一次创建的时候添加当前时间。常作为创建时间使用。注意:每次create都会调用。
 
  默认的formwidget是TextInput。
 
  注意:设置auto_now或者auto_now_add为True会导致当前自动拥有editable=False和blank=True设置。
 
  8、DateTimeField([auto_now=False,auto_now_add=False,**options])
 
  日期+时间。与python里的datetime.datetime实例同。常用附加选项和DateField一样。
 
  默认formwidget是一个TextInput
 
  9、DecimalField(max_digits=None,decimal_places=None[,**options])
 
  用decimal实例表示固定精度的十进制数的字段,有两个必须参数,max_digits数字允许的最大位数,decimal_places小数的最大位数。django后台用表示该字段,通常用来表示金额
 
  10、EmailField([maxlength=75,**options])
 
  在CharField基础上附加了邮件地址合法性验证。不需要强制设定max_length
 
  注意:当前默认设置max_length是75,虽然已经不符合标准,但未了向前兼容,未修改。
 
  11、FileField(upload_to=None[,max_length=100,**options])
 
  文件上传字段。不支持primary_key和unique选项。否则会报TypeError异常。
 
  必须设置FileField.upload_to选项,这个是本地文件系统路径,附加在MEDIA_ROOT设置的后边,也就是MEDIA_ROOT下的子目录相对路径。默认的formwidget是FileInput。
 
  12、FloatField
 
  与python里的float实例相同,默认的formwidget是TextInput。
 
  虽然FloatField与DecimalField都是表示实数,但却是不同的表现形式,FloatField用的是pythondfloat类型,但是DecimalField用的却是Decimal类型。区别可见:http://docs.python.org/2.7/library/decimal.html#decimal
 
  13、ImageField([upload_to=None,height_field=None,width_field=None,max_length=100,**options])
 
  在FileField基础上加上是否是合法图片验证功能的一个类型。
 
  除了FileField有的属性外,ImageField另有height和width属性。
 
  注意:需要安装PIL或者Pillow模块。在数据库中同样表现为varchar(100),可通过max_length改大小。
 
  14、IntegerField
 
  整数,默认的formwidget是TextInput。
 
  15、IPAddressField
 
  IP地址,字符串类型,如127.0.0.1。默认formwidget是TextInput。
 
  16、GenericIPAddressField
 
  ipv4和ipv6地址表示,ipv6遵循RFC4291section2.2,
 
  17、NullBooleanField
 
  可以包含空值的布尔类型,相当于设置了null=True的BooleanField。
 
  18、PositiveSmallIntegerField
 
  正短整数或0类型,类似于PositiveIntegerField,取值范围依赖于数据库特性,[0,32767]的取值范围对Django所支持的数据库都是安全的。
 
  19、PositiveIntegerField
 
  正整数或0类型,取值范围为[0,2147483647]
 
  20、SlugField
 
  只能包含字母,数字,下划线和连字符的字符串,通常被用于URLs表示。可选参数max_length=50,prepopulate_from用于指示在admin表单中的可选值。db_index,默认为True。
 
  21.SmallIntegerField
 
  小整数字段,类似于IntegerField,取值范围依赖于数据库特性,[-32768,32767]的取值范围对Django所支持的数据库都是安全的。
 
  22、TextField
 
  大文本,巨长的文本。默认的formwidget是Textarea。
 
  23、TimeField
 
  时间,对应Python的datetime.time
 
  24、URLField
 
  加了URL合法性验证的CharField。
 
  默认的formwidget是TextInput。
 
  默认max_length=200,可修改。
 
  25、FilePathField(path=None[,match=None,recursive=False,max_length=100,options])
 
  他是一个CharField,用来选择文件系统下某个目录里面的某些文件,它有三个专有参数,只有path是必须的。path是一个目录的绝对路径,match是一个正则表达式字符串,用来过滤文件名称;recursive为bool,指定是否包含path下的子目录。
 
  注意,如果使用MySQLdb1.2.1p2和utf-8_bin编码,会有一些问题https://docs.djangoproject.com/en/dev/ref/databases/#mysql-collation。具体问题未分析,可自行避开。
 
  Field选项
 
  null
 
  boolean值,缺省设置为false。通常不将其用于字符型字段上,比如CharField,TextField上。字符型字段如果没有值会返回空字符串。
 
  blank
 
  boolean值,该字段是否可以为空。如果为假,则必须有值。
 
  choices
 
  元组值,一个用来选择值的2维元组。第一个值是实际存储的值,第二个用来方便进行选择。如SEX_CHOICES=((‘F’,’Female’),(‘M’,’Male’),)
 
  db_column
 
  string值,指定当前列在数据库中的名字,不设置,将自动采用model字段名;
 
  db_index
 
  boolean值,如果为True将为此字段创建索引;
 
  default
 
  给当前字段设定的缺省值,可以是一个具体值,也可以是一个可调用的对象,如果是可调用的对象将每次产生一个新的对象;
 
  editable
 
  boolean值,如果为假,admin模式下将不能改写。缺省为真;
 
  error_messages
 
  字典,设置默认的出错信息,可覆盖的key有null,blank,invalid,invalid_choice,和unique。
 
  help_text
 
  admin模式下帮助文档
 
  formwidget内显示帮助文本。
 
  primary_key
 
  设置主键,如果没有设置django创建表时会自动加上:id=meta.AutoField(‘ID’,primary_key=True)
 
  primary_key=Trueimpliesblank=False,null=Falseandunique=True.Onlyoneprimarykeyisallowedonanobject.
 
  radio_admin
 
  用于admin模式下将select转换为radio显示。只用于ForeignKey或者设置了choices
 
  unique
 
  boolean值,数据是否进行唯一性验证;
 
  unique_for_date
 
  字符串类型,值指向一个DateTimeField或者一个DateField的列名称。日期唯一,如下例中系统将不允许title和pub_date两个都相同的数据重复出现
 
  title=meta.CharField(maxlength=30,unique_for_date=’pub_date’)
 
  unique_for_month/unique_for_year
 
  用法同上
 
  verbose_name
 
  string类型。更人性化的列名。
 
  validators
 
  有效性检查。无效则抛出django.core.validators.ValidationError异常。