Поиск…


параметры

параметр подробности
ноль Если true, пустые значения могут быть сохранены как null в базе данных
пустой Если true, тогда поле не потребуется в формах. Если поля оставлены пустыми, Django будет использовать значение поля по умолчанию.
выбор Итерируемый двухэлементный итерабель, который будет использоваться в качестве выбора для этого поля. Если установлено, поле отображается как раскрывающееся меню администратора. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Чтобы группировать параметры, просто вставьте значения: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))]
db_column По умолчанию django использует имя поля для столбца базы данных. Используйте это, чтобы указать собственное имя
db_index Если True , индекс будет создан в этом поле в базе данных
db_tablespace Табличное пространство, используемое для индекса этого поля. Это поле используется только в том случае, если движок базы данных поддерживает его, иначе его игнорируют .
дефолт Значение по умолчанию для этого поля. Может быть значением или вызываемым объектом. Для изменяемых значений по умолчанию (список, набор, словарь) вы должны использовать вызываемый. Из-за совместимости с миграциями вы не можете использовать lambdas.
редактируемые Если False , это поле не отображается в администраторе модели или любом ModelForm . Значение по умолчанию - True .
Сообщения об ошибках Используется для настройки сообщений об ошибках по умолчанию, отображаемых для этого поля. Значение представляет собой словарь, с ключами, представляющими ошибку, и значением, являющимся сообщением. Клавиши по умолчанию (для сообщений об ошибках) являются null , blank , invalid , invalid_choice , unique и unique_for_date ; дополнительные сообщения об ошибках могут быть определены пользовательскими полями.
help_text Текст, который будет отображаться в поле, чтобы помочь пользователям. HTML разрешен.
on_delete Когда объект, на который ссылается ForeignKey, удаляется, Django будет эмулировать поведение ограничения SQL, указанного аргументом on_delete. Это второй позиционный аргумент для полей ForeignKey и OneToOneField . Другие поля не имеют этого аргумента.
основной ключ Если True , это поле будет первичным ключом. Django автоматически добавляет первичный ключ; поэтому это требуется только в том случае, если вы хотите создать настраиваемый первичный ключ. У вас может быть только один первичный ключ для каждой модели.
уникальный Если True , ошибки возникают, если для этого поля введены повторяющиеся значения. Это ограничение на уровне базы данных, а не просто блок пользовательского интерфейса.
unique_for_date Задайте значение DateField или DateTimeField , и ошибки будут подняты, если есть повторяющиеся значения для той же даты или даты .
unique_for_month Подобно unique_for_date , кроме проверок, ограниченного для месяца.
unique_for_year Подобно unique_for_date , кроме проверок, ограничивается годом.
verbose_name Дружественное имя для поля, используемое django в разных местах (например, создание меток в форме администратора и модели).
валидаторы Список валидаторов для этого поля.

замечания

  • Вы можете написать свои собственные поля, если найдете это необходимым
  • Вы можете переопределить функции базового класса модели, чаще всего функцию save()

Число полей

Приведены примеры числовых полей:

AutoField

Автоматически увеличивающееся целое число, обычно используемое для первичных ключей.

from django.db import models

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

По умолчанию каждая модель получает поле первичного ключа (называемое id ). Поэтому нет необходимости дублировать поле id в модели для первичного ключа.


BigIntegerField

Целочисленные номера фитингов от -9223372036854775808 до 9223372036854775807 ( 8 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 полезен для выбора, это способ Djangoic для реализации Enum:

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

Десятичное число с фиксированной точностью, представленное в Python экземпляром Decimal. В отличие от IntegerField и его производных это поле имеет 2 требуемых аргумента:

  1. DecimalField.max_digits : максимальное количество цифр, разрешенных в номере. Обратите внимание, что это число должно быть больше или равно decimal_places.
  2. DecimalField.decimal_places : количество десятичных знаков для хранения с номером.

Если вы хотите хранить номера до 99 с 3 десятичными знаками, вам нужно использовать max_digits=5 и decimal_places=3 :

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

BinaryField

Это специализированное поле, используемое для хранения двоичных данных. Он принимает только байты . Данные основаны на базе64 при хранении.

Поскольку это хранение двоичных данных, это поле не может использоваться в фильтре.

from django.db import models

class MyModel(models.Model):
    my_binary_data = models.BinaryField()

CharField

CharField используется для хранения определенных длин текста. В приведенном ниже примере в поле можно сохранить до 128 символов текста. Ввод строки дольше, чем это приведет к повышению ошибки проверки.

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=128, blank=True)

DateTimeField

DateTimeField используется для хранения значений времени.

class MyModel(models.Model):
    start_time = models.DateFimeField(null=True, blank=True)
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

DateTimeField имеет два необязательных параметра:

  • auto_now_add устанавливает значение поля в текущее время и дату, когда объект создается.

  • auto_now устанавливает значение поля в текущее время и время при каждом сохранении поля.

Эти параметры и параметр по default являются взаимоисключающими.

Иностранный ключ

ForeignKey поля используются для создания many-to-one отношениям между моделями. Не похоже, что большинство других полей требуют позиционных аргументов. Следующий пример демонстрирует отношение к машине и владельцу:

from django.db import models

class Person(models.Model):
    GENDER_FEMALE = 'F'
    GENDER_MALE = 'M'

    GENDER_CHOICES = (
        (GENDER_FEMALE, 'Female'),
        (GENDER_MALE, 'Male'),
    )

    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    age = models.SmallIntegerField()


class Car(model.Model)
    owner = models.ForeignKey('Person')
    plate = models.CharField(max_length=15)
    brand = models.CharField(max_length=50)
    model = models.CharField(max_length=50)
    color = models.CharField(max_length=50)

Первый аргумент поля - это класс, к которому относится модель. Второй позиционный аргумент - аргумент on_delete . В текущих версиях этот аргумент не требуется, но он потребуется в Django 2.0. Функциональность аргумента по умолчанию показана следующим образом:

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.CASCADE)
    ...

Это приведет к удалению объектов Car из модели, когда ее владелец удалил из модели Person. Это функциональность по умолчанию.

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.PROTECT)
    ...

Это предотвратит удаление объектов Person, если они связаны с хотя бы одним объектом Car. Все объекты Car, которые ссылаются на объект Person, должны быть удалены первыми. И тогда объект Person может быть удален.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow