Django模型层——数据库字段Field的属性与类型

参考文献:

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

扫描二维码关注公众号,回复: 2306225 查看本文章

[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)
View Code

[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=Falseauto_now_add=False**options

是python中的datetime.date实例对象。

auto_now参数:

  当对象被保存时,会自动更新这个字段的时间为当前时间。对于一个表示“最后修改时间”的字段,特别有用。

  当调用Model.save()时会自动更新,但使用其他方法,比如QuerySet.update()等方法是不会自动更新的,因为在这个方法中,你可以设置其他值,如果自动更新会有冲突。

auto_now_add参数:

  当对象第一次创建时,会自动设置时间为当前时间。对于一个表示“创建时间”的字段,特别有用。当创建的时候,该字段的值不能被修改,只能使用自动添加的值。

如果想要修改这个字段的值,需要如下设置:

  注意,当设置了auto_now或者auto_now_add为True时,将会使得字段有editable=False以及blank=True的设置。

DateTimeField

class DateTimeField(auto_now=Falseauto_now_add=False**options)

是python中的datetime.datetime实例化对象。其他特性同上。

DecimalField

class DecimalField(max_digits=Nonedecimal_places=None**options)

一个固定精度的十进制数,是python中的Decimal实例化对象。其中有两个参数:

max_digits: 定义最大位数

decimal_places: 定义小数的最大位数

DurationField

EmailField

class EmailField(max_length=254**options)

本质上是一个CharField字段,并且会检查这个字段的值是否是合法的email地址。

FileField

class FileField(upload_to=Nonemax_length=100**options)

一个文件上传字段。

FilePathField
class  FilePathField( path=Nonematch=Nonerecursive=Falsemax_length=100**options) [source]
一个CharField字段,并且其中的值只能是文件名。

FloatField

class FloatField(**options)

浮点数字段。

ImageField
class  ImageField( upload_to=Noneheight_field=Nonewidth_field=Nonemax_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,该字段可以接收大的文本输入。
TimeField
class  TimeField(auto_now=False, auto_now_add=False, **options)
时间字段。
URLField
class  URLField( max_length=200**options)
URL字段。
UUIDField
class  UUIDField( **options)
存储uuid码的字段。

猜你喜欢

转载自www.cnblogs.com/aric-zhu/p/9350146.html