参考文献:
https://docs.djangoproject.com/zh-hans/2.0/ref/models/fields/
字段Field的属性
对所有字段都共有的属性:
[null]
默认为False,如果设置为True,则django会在数据库中将空数据设置为null。
[blank]
默认为False,如果设置为True,则django允许数据为空。
注意blank和null的区别:blank是允许输入的数据为空,而null是将数据库中的空数据设置为null
[choices]
choices可以是任何一个可迭代对象,在元组中第一个参数是models中的实际值,第二个参数是给用户可读的解释性参数。如下实例:
from django.db import models class Student(models.Model): FRESHMAN = 'FR' SOPHOMORE = 'SO' JUNIOR = 'JR' SENIOR = 'SR' YEAR_IN_SCHOOL_CHOICES = ( (FRESHMAN, 'Freshman'), (SOPHOMORE, 'Sophomore'), (JUNIOR, 'Junior'), (SENIOR, 'Senior'), ) year_in_school = models.CharField( max_length=2, choices=YEAR_IN_SCHOOL_CHOICES, default=FRESHMAN, ) def is_upperclass(self): return self.year_in_school in (self.JUNIOR, self.SENIOR)
[db_column]
用来设置数据库中列的字段名称,如果未设置,则django会使用field‘s name作为数据库中列的名称。
[db_index]
如果设为True,则数据库会为这个字段创建索引。
[db_tablespace]
是为了给上述加了index的字段命名的。
[default]
既可以是值,也可以是对象。如果是对象的话,那么每次都会创建一个新的对象。
不能是可变对象,比如模型实例、列表、集合等。
lambdas也不能,因为无法被migrations序列化。
如果是ForeignKey的话,则设置pk的值为默认值,而不是用模型实例化来设置默认值。
当新模型创建时,未设置值时的时候使用default的值,或者是primary key设置为none时,也会使用default值。
[editable]
默认为True,如果设置为False,则无论是admin或者ModelForm中都不会显示。
[error_messages]
能够重写该字段错误引发的异常消息,格式是字典的形式。
该字典的共有的键如下:null, blank, invalid, invalid_choice, unique, unique_for_date
[help_text]
帮助信息
[primary_key]
如果设置为True,则该字段会被设置为主键。
当不设置主键字段时,django会默认创建一个AutoField字段作为主键。
当一个字段为主键时,就表明了null=False, 并且unique=True。
主键字段是只读的,当试图修改已存在数据的主键字段时,会重新创建一个新的值。
[unique]
当设置为True时,表明该字段具有唯一性。
该特性对Many-to-many Field和One-to-one Field不起作用。
当设置了unique后,就不需要创建db_index了,因为unique会表明已经创建index了
[unique_for_date]
一般给DateField和DateTimeField字段设置,表明该字段的date值是唯一的。
[unique_for_month]
同上
[unique_for_year]
同上
[verbose_name]
给字段添加用户可读的信息。如果不设置的话,django会默认使用属性名,并将下划线替换成空格作为用户可读信息。
[validators]
详细请看:https://docs.djangoproject.com/zh-hans/2.0/ref/validators/
字段Field的类型
AutoField
是一个自动增加的整数字段,一般给主键。
BigAutoField
一个64位的整数字段,和AutoField类似,只是范围从1到9223372036854775807.
BigIntegerField
一个64位的整数字段,和IntegerField类似,只是范围从-9223372036854775807到9223372036854775807.
BinaryField
存储原生的二进制数据的字段。只支持bytes类型的复制。
BooleanField
一个true/false 字段。
CharField
class CharField
(max_length=None, **options)
字符串字段。其中max_length参数表示最大字符串长度,是必须要指明的。
DateField
class DateField
(auto_now=False, auto_now_add=False, **options)
是python中的datetime.date实例对象。
auto_now参数:
当对象被保存时,会自动更新这个字段的时间为当前时间。对于一个表示“最后修改时间”的字段,特别有用。
当调用Model.save()时会自动更新,但使用其他方法,比如QuerySet.update()等方法是不会自动更新的,因为在这个方法中,你可以设置其他值,如果自动更新会有冲突。
auto_now_add参数:
当对象第一次创建时,会自动设置时间为当前时间。对于一个表示“创建时间”的字段,特别有用。当创建的时候,该字段的值不能被修改,只能使用自动添加的值。
如果想要修改这个字段的值,需要如下设置:
- For
DateField
:default=date.today
- fromdatetime.date.today()
- For
DateTimeField
:default=timezone.now
- fromdjango.utils.timezone.now()
注意,当设置了auto_now或者auto_now_add为True时,将会使得字段有editable=False以及blank=True的设置。
DateTimeField
class DateTimeField
(auto_now=False, auto_now_add=False, **options)
是python中的datetime.datetime实例化对象。其他特性同上。
DecimalField
class DecimalField
(max_digits=None, decimal_places=None, **options)
一个固定精度的十进制数,是python中的Decimal实例化对象。其中有两个参数:
max_digits: 定义最大位数
decimal_places: 定义小数的最大位数
DurationField
EmailField
class EmailField
(max_length=254, **options)
本质上是一个CharField字段,并且会检查这个字段的值是否是合法的email地址。
FileField
class FileField
(upload_to=None, max_length=100, **options)
一个文件上传字段。
- FilePathField
-
class
FilePathField
( path=None, match=None, recursive=False, max_length=100, **options) [source] ¶ - 一个CharField字段,并且其中的值只能是文件名。
FloatField
class FloatField
(**options)
浮点数字段。
- ImageField
-
class
ImageField
( upload_to=None, height_field=None, width_field=None, max_length=100, **options) - 图像字段
- IntegerField
-
class
IntegerField
( **options) - 整数字段,取值范围从-2147483648到2147483648
- GenericIPAddressField
-
class
GenericIPAddressField
( protocol='both', unpack_ipv4=False, **options) - ip地址字段
- NullBooleanField
-
class
NullBooleanField
( **options) - 和BooleanField字段类似,只是该字段支持Null数据。
- PositiveIntegerField
-
class
PositiveIntegerField
( **options) - 正整数字段,范围从0到2147483648
- PositiveSmallIntegerField
-
class
PositiveSmallIntegerField
( **options) - 小的正整数字段,范围从0到32767
- SlugField
-
class
SlugField
( max_length=50, **options)
- SmallIntegerField
-
class
SmallIntegerField
( **options) - 小整数字段,范围从-32767到32767
- TextField
-
class
TextField
( **options) - 大的文本字段,相比于CharField,该字段可以接收大的文本输入。