Django                
            Справочник по заданию модели
        
        
            
    Поиск…
параметры
| параметр | подробности | 
|---|---|
| ноль | Если 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 требуемых аргумента:
- DecimalField.max_digits : максимальное количество цифр, разрешенных в номере. Обратите внимание, что это число должно быть больше или равно decimal_places.
- 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 может быть удален.