数字字段

给出了数字字段的示例:

下拉列表 AutoField

通常用于主键的自动递增整数。

from django.db import models

class MyModel(models.Model):
    pk = models.AutoField()

默认情况下,每个模型都会获得一个主键字段(称为 id)。因此,出于主键的目的,不必在模型中复制 id 字段。

BigIntegerField

-922337203685477580892233720368547758078 Bytes)的整数拟合数。

from django.db import models

class MyModel(models.Model):
    number_of_seconds = models.BigIntegerField()

IntegerField

IntegerField 用于存储 -2147483648 到 2147483647(4 Bytes)的整数值。

from django.db import models

class Food(models.Model):
    name = models.CharField(max_length=255)
    calorie = models.IntegerField(default=0)

default 参数不是强制性的。但是设置默认值很有用。

PositiveIntegerField

像 IntegerField 一样,但必须是正数或零(0)。PositiveIntegerField 用于存储 0 到 2147483647(4 Bytes)的整数值。这在字段上应该是有用的,该字段应该在语义上是正的。例如,如果你正在记录含有卡路里的食物,那么它不应该是负面的。该字段将通过其验证来防止负值。

from django.db import models

class Food(models.Model):
    name = models.CharField(max_length=255)
    calorie = models.PositiveIntegerField(default=0)

default 参数不是强制性的。但是设置默认值很有用。

SmallIntegerField

SmallIntegerField 用于存储 -32768 到 32767(2 Bytes)的整数值。此字段对于非极端值非常有用。

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=255)
    temperature = models.SmallIntegerField(null=True)

PositiveSmallIntegerField

SmallIntegerField 用于存储 0 到 32767 之间的整数值(2 Bytes)。就像 SmallIntegerField 一样,这个字段对于不那么高的值非常有用,并且在语义上应该是积极的。例如,它可以存储不能为负的年龄。

from django.db import models

class Staff(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    age = models.PositiveSmallIntegerField(null=True)

除了 PositiveSmallIntegerField 对选择有用之外,这是实现 Enum 的 Djangoic 方式:

from django.db import models
from django.utils.translation import gettext as _

APPLICATION_NEW = 1
APPLICATION_RECEIVED = 2
APPLICATION_APPROVED = 3
APPLICATION_REJECTED = 4

APLICATION_CHOICES = (
    (APPLICATION_NEW, _('New')),
    (APPLICATION_RECEIVED, _('Received')),
    (APPLICATION_APPROVED, _('Approved')),
    (APPLICATION_REJECTED, _('Rejected')),
)

class JobApplication(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    status = models.PositiveSmallIntegerField(
        choices=APLICATION_CHOICES, 
        default=APPLICATION_NEW
    )
    ...

根据情况将选择定义为类变量或模块变量是使用它们的好方法。如果将选项传递给没有友好名称的字段,则会产生混淆。

DecimalField

一个固定精度的十进制数,由 Decimal 实例在 Python 中表示。与 IntegerField 及其衍生物不同,此字段有 2 个必需参数:

  1. DecimalField.max_digits :数字中允许的最大位数。请注意,此数字必须大于或等于 decimal_places。
  2. DecimalField.decimal_places :与数字一起存储的小数位数。

如果你想存储最多 99 个数字,小数点后 3 位,你需要使用 max_digits=5decimal_places=3

class Place(models.Model):
    name = models.CharField(max_length=255)
    atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)