數字欄位

給出了數字欄位的示例:

下拉選單 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)