• Информация на сайте предоставляется «как есть», может содержать неточности и не является консультацией или офертой.
  • Перед использованием проконсультируйтесь со специалистом.

Используя сайт, вы подтверждаете, что вы изучили и согласны с документами Политика конфиденциальности и обработки персональных данныхи Пользовательское соглашение.

Сайт использует cookies для работы и сбора аналитики. Вы можете принять или настроить их, а также полностью отключить в настройках браузера.

Настройки cookies
Необходимые для работы веб-сайта

Используются для входа, навигации и защиты (например: sessionid, csrftoken). Без них сайт может работать с перебоями.

Помогают улучшить сайт, собирая статистику посещений (например, через Яндекс Метрику).

Используются для показа персонализированной рекламы и ретаргетинга в рекламных сетях.

Настройки интерфейса

Декоративный эффект свечения при клике по странице.

DEV -
PROGRAM.RU
Контакты

Django Models: типы полей и их параметры в моделях

Разбираем типы полей моделей в Django, назначение и особенности использования. Рассмотрим параметры: null, blank, default, choices, unique и другие.

Django поля и параметры

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

Для чего нужно поле CharField в django

CharField используется для хранения строк ограниченной длины. Он подходит для таких данных, как название статьи, имя пользователя, заголовок страницы или название категории. При объявлении этого поля необходимо указать параметр max_length, определяющий максимальную длину строки.

title = models.CharField(max_length=200)

Пример Charfield в Django Models

В этом примере поле title предназначено для хранения строки длиной не более 200 символов.

Параметр max_length позволяет задать ограничение, соответствующее требованиям приложения.

Для чего нужно поле TextField в django

Для хранения больших текстовых значений в Django используется TextField. Оно подходит для описаний, содержимого статей, комментариев и других текстов, длина которых заранее неизвестна.

content = models.TextField()

пример в Django Models поле TextField

В отличие от CharField, для TextField обычно не указывают max_length, поскольку это поле предназначено для текста произвольной длины.

При этом фактические ограничения на объём хранимого текста могут зависеть от используемой базы данных.

Для чего нужно поле IntegerField и PositiveIntegerField

IntegerField предназначен для хранения целых чисел.

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

views = models.IntegerField(default=0)

пример в Django Models поле IntegerField

В данном примере поле views хранит количество просмотров, а параметр default=0 задаёт значение по умолчанию.

Если при создании объекта значение поля не указано, Django использует ноль.

У IntegerField имеется аналог PositiveIntegerField (от 0 до 2147483647) , предназначенный для хранения положительных целых чисел и нуля, то есть не допускает отрицательные значения.

Также Django предоставляет PositiveSmallIntegerField (от 0 до 32767 ) и PositiveBigIntegerField (от 0 до 9223372036854775807), отличающиеся диапазоном допустимых значений.

Для чего нужно поле FloatField в django

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

temperature = models.FloatField()

пример в Django Models поле FloatField

Для финансовых операций лучше подходит DecimalField, о котором речь идет ниже.

Для чего нужно поле DecimalField в django

DecimalField используется для хранения десятичных чисел с фиксированной точностью.

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

В приведённом ниже примере можно хранить значения с двумя знаками после десятичного разделителя, а общее количество цифр не должно превышать десяти.

price = models.DecimalField(
    max_digits=10,
    decimal_places=2,
)

пример в Django Models поле DecimalField

Параметр max_digits задаёт максимальное общее количество цифр, включая цифры до и после десятичного разделителя.

Параметр decimal_places определяет количество цифр после него.

Для денежных значений обычно предпочтительнее использовать DecimalField, а не FloatField, поскольку он обеспечивает десятичную точность, необходимую для финансовых расчётов.

Для чего нужно поле BooleanField в django

Для хранения логических значений применяется BooleanField.

Такое поле может представлять состояние, которое имеет два варианта интерпретации: включено или выключено, опубликовано или нет, активно или неактивно.

is_published = models.BooleanField(default=False)

пример в Django Models поле BooleanField

Здесь поле is_published определяет, опубликована ли статья.

По умолчанию значение равно False, то есть статья считается неопубликованной.

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

Для чего нужны поля DateField, TimeField и DateTimeField

Для работы с датами и временем Django предоставляет два распространённых типа полей: DateField и DateTimeField.

DateField используется для хранения даты без указания времени.

Например, его можно применять для даты рождения, даты начала действия договора или даты публикации, если время не имеет значения.

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

пример в Django Models поле DateTimeField

TimeField используется для хранения только времени.

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

start_time = models.TimeField(default="09:00")

пример в Django Models поле TimeField

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

Он подходит для фиксации момента создания записи, последнего изменения объекта или времени выполнения определённого действия.

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

пример в Django Models поле DateTimeField

В этом примере created_at автоматически получает дату и время при первоначальном создании объекта, а updated_at обновляется при каждом сохрании объекта через обычный вызов save().

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

Для чего нужно поле EmailField в django

EmailField предназначен для хранения адресов электронной почты.

По своей сути это специализированное строковое поле, которое предоставляет встроенную проверку формата email при помощи стандартной валидации в Django.

email = models.EmailField()

пример в Django Models поле EmailField

Такое поле подходит для хранения контактных адресов пользователей, авторов публикаций или клиентов. При необходимости можно дополнительно указать max_length, blank, null и другие параметры, доступные для соответствующего поля.

Важно учитывать, что EmailField не проверяет фактического существование почтового ящика и не подтверждает принадлежность адреса конкретному человеку.

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

Для чего нужно поле UUIDField в Django

UUIDField используется для хранения уникальных идентификаторов UUID (Universally Unique Identifier).

В отличие от обычного автоинкрементного id, UUID не зависит от последовательности записей и может генерироваться независимо от базы данных.

    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False,
    )

пример в Django Models поле UUIDField

Параметр default=uuid.uuid4 задаёт создание нового UUID (пример: 6827b7ca-b545-4632-a1e7-a9f0eabe9daa) при создании объекта.

Важно передавать функцию uuid.uuid4, без указания скобок (), ведь вызов будет происходить отдельно для каждой записи.

primary_key=True делает UUID первичным ключом модели вместо автоматически создаваемого поля id, а editable=False исключает его из автоматически создаваемых полей в формах админ панели (Django Admin ) и ModelForm.

UUID удобно использовать, когда идентификаторы должны быть абсолютно уникальными, в том числе вне своей таблицы, например при обмене данными между несколькими системами.

Для чего нужно поле JSONField в Django

JSONField используется для хранения структурированных данных в формате JSON.

В поле можно сохранять словари, списки, строки, числа, логические значения и None.

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

metadata = models.JSONField(default=dict, blank=True)

пример в Django Models поле JSONField

Важно передавать dict без скобок, чтобы Django создавал новый словарь каждый раз, а не использовал один общий изменяемый объект.

Параметр default=dict задаёт пустой словарь в качестве значения по умолчанию.

JSONField поддерживается разными СУБД, но возможности работы с JSON и особенности хранения зависят от используемой базы данных.

Для чего нужно поле SlugField в django

SlugField используется для хранения идентификаторов ссылок (URL), то есть коротких текстовых значений, которые обычно формируются из заголовка статьи или названия объекта.

Slug делает URL более читаемыми и удобными для пользователей и поисковых систем.

slug = models.SlugField(
    max_length=200,
    unique=True,
)

пример в Django Models поле SlugField

Параметр max_length задаёт максимальную длину значения.

unique=True ставит ограничение и гарантирует, что у разных записей не будет одинаковых slug, что особенно важно, если по этому полю выполняется поиск объекта.

По умолчанию SlugField допускает только ASCII-буквы, цифры, дефисы и символы подчёркивания.

Чтобы разрешить Unicode-символы, например кириллицу, можно указать allow_unicode=True.

Для чего нужно поле URLField в Django

URLField используется для хранения URL-адресов, например ссылок на сайты, внешние ресурсы или страницы социальных сетей.

website = models.URLField(
    max_length=200,
    blank=True,
)

пример в Django Models поле URLField

Параметр max_length задаёт максимальную длину URL-адреса, по умолчанию 200 знаков.

blank=True позволяет оставить поле пустым при заполнении форм и прохождении валидации.

URLField является подклассом CharField, поэтому хранит URL как строку.

Для чего нужны поля FileField и ImageField

Для работы с загружаемыми файлами Django предоставляет FileField.

Поле позволяет хранить информацию о файле и управлять его расположением в файловом хранилище приложения.

document = models.FileField(upload_to="documents/")

пример в Django Models поле FileField

Параметр upload_to задаёт путь к папке, в которой будут загружаться файлы.

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

Сам файл размещается в хранилище указанном в настройках, по умолчанию это файловая система машины.

Для изображений используется ImageField.

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

Для использования этого поля необходимо установить библиотеку Pillow.

image = models.ImageField(upload_to="images/")

пример в Django Models поле ImageField

ImageField часто применяется для фотографий пользователей, изображений товаров и иллюстраций к публикациям.

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

Дополнительные параметры полей

Помимо типа данных, каждое поле модели может иметь дополнительные параметры, позволяющие управлять его поведением.

Такие параметры задаются при объявлении поля и помогают определить, какие значения допустимы, что происходит при отсутствии значения и как поле используется в формах.

Рассмотрим некоторые из них в списке ниже:

  • null=True позволяет хранить NULL в базе данных

  • blank=True разрешает оставлять поле пустым при валидации

  • choices задаёт список допустимых значений для поля

    • TextChoices и IntegerChoices позволяют определять варианты выбора с помощью перечислений

  • db_column задаёт собственное имя столбца в базе данных

  • db_comment добавляет комментарий к столбцу в базе данных

  • db_default задаёт значение по умолчанию на уровне базы данных

  • db_index=True позволяет создать индекс для ускорения определённых запросов

  • db_tablespace задаёт табличное пространство для индекса поля, если СУБД поддерживает эту возможность

  • default задаёт значение по умолчанию для поля при создании объекта

  • editable=False исключает поле из форм и административной панели Django

  • error_messages позволяет переопределить стандартные сообщения об ошибках валидации

  • help_text добавляет поясняющий текст для поля в формах и административной панели

  • primary_key=True делает поле первичным ключом модели

  • unique=True гарантирует уникальность значения поля в базе данных

  • unique_for_date /unique_for_month / unique_for_year запрещает повторение значения поля для одной и той же даты / месяца / года

  • verbose_name задаёт понятное название поля для отображения в формах и административной панели

  • validators позволяет указать дополнительные функции проверки значения поля

Как выбрать подходящий тип поля в Django Models

В Django выбор типа поля модели (Field) зависит от характера хранимых данных, их формата, допустимых значений и операций, которые приложение будет выполнять с этими данными.

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

Для удобства выбора вы можете опираться на следующую таблицу:

Основные типы полей моделей Django
Тип поляНазначениеПример использованияОсобенности
CharFieldХранение коротких строкИмя, название статьи, заголовокТребует указания max_length, максимальной длины строки
TextFieldХранение длинного текстаТекст статьи, описание товара, комментарийПодходит для текста произвольной длины; max_length не обязателен
IntegerFieldХранение целых чиселКоличество товаров, возраст, число просмотровПодходит для положительных и отрицательных целых чисел
PositiveIntegerFieldХранение неотрицательных целых чиселКоличество участников, остаток товаровПредназначен для значений от нуля и выше
FloatFieldХранение чисел с плавающей точкойТемпература, физические измеренияВозможны погрешности при представлении дробных чисел
DecimalFieldХранение десятичных чисел с заданной точностьюЦена товара, стоимость заказаПозволяет задавать общее количество цифр и число знаков после запятой
BooleanFieldХранение логических значенийОпубликована ли статья, активен ли пользовательПринимает True или False
DateFieldХранение датыДата рождения, дата публикацииСодержит дату без времени
TimeFieldХранение времениВремя начала мероприятияСодержит время без даты
DateTimeFieldХранение даты и времениДата создания записи, время измененияПодходит для фиксации момента создания или изменения объекта
EmailFieldХранение адреса электронной почтыEmail пользователяВыполняет проверку формата адреса при валидации
URLFieldХранение интернет-адресаСсылка на сайт, адрес источникаПредназначен для URL и проверяет его формат при валидации
SlugFieldХранение строк для URLdjango-type-fields-urlОбычно используется для человекочитаемых адресов страниц
UUIDFieldХранение уникальных идентификаторов UUIDИдентификатор заказа или объектаУдобен, когда требуется идентификатор, не основанный на последовательном числе
FileFieldХранение ссылки на загруженный файлДокумент, архивВ базе хранится путь к файлу, а сам файл обычно находится в файловом хранилище
ImageFieldХранение ссылки на изображениеАватар, фотография товараРаботает с изображениями и требует Pillow

Если у вас остались вопросы по полям в Django моделях, можете обратиться за консультацией к программисту.

Вам может быть интересно

Поделиться
Ничего не найдено
Найдите нужную страницу

Статьи, инструменты и помощь