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 может быть удален.