JavaRush /Курсы /Модуль 3: Django /Основные типы полей моделей

Основные типы полей моделей

Модуль 3: Django
7 уровень , 2 лекция
Открыта

Продолжая наше приключение в мире Django ORM, мы подходим к одной из ключевых тем — типам полей моделей. Если модель — это ваша конструкция, то поля модели — это её кирпичи. Именно благодаря полям можно хранить всю ту магию (данные), что вы собираетесь использовать в вашем приложении. Сегодня мы разберём, какие типы полей доступны в Django и как правильно их использовать. Настройка полей — это как проектирование базы данных, но с дополнительным слоем комфорта и гибкости, который предоставляет Django.

Зачем вообще знать типы полей?

Представьте, что вы проектируете реальную базу данных для приложения. У вас есть информация о пользователях (имя, возраст, дата рождения и т.д.). Django предоставляет разные типы полей для хранения этих данных. Хотите сохранить текст? Используйте CharField. Храните числа? Для этого есть IntegerField. Даты? Пожалуйста, вот вам DateField.

Знание того, какие поля выбирать для хранения данных, важно по двум причинам:

  • Оптимизация структуры базы данных. Неправильный выбор типов данных может загромождать таблицы или усложнять запросы.
  • Валидация данных. Django автоматически проверяет данные, которые записываются в базу, в зависимости от типа поля. Так что плохие данные "не пролезут".

Основные типы полей Django

Ниже представлен список наиболее популярных типов полей. Мы рассмотрим их функционал и разберём примеры использования.

1. CharField

Это текстовое поле фиксированной длины. Вы должны обязательно указать атрибут max_length.

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=50)  # Название продукта, максимум 50 символов

Зачем нужен max_length? Во-первых, чтобы предотвратить ситуации, когда пользователи вводят "войну и мир" в поле для имени. Кроме того, базы данных, как правило, оптимизируют длину строк, что ускоряет работу запросов.

2. TextField

Если CharField недостаточно для ваших потребностей и нужно хранить много текста, то на сцену выходит массивный брат — TextField.

class BlogPost(models.Model):
    content = models.TextField()  # Текст поста блога

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

3. IntegerField

Для хранения целых чисел используйте IntegerField.

class Order(models.Model):
    quantity = models.IntegerField()  # Количество единиц товара в заказе

Если вы захотите задать нецелое число (например, "1.5 кг моркови"), то используйте другой тип поля (подсказка: DecimalField).

4. DecimalField

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

class Product(models.Model):
    price = models.DecimalField(max_digits=10, decimal_places=2)  
    # Число из 10 цифр, из которых 2 - после запятой

Параметры:

  • max_digits — количество всех цифр.
  • decimal_places — сколько из этих цифр будет после запятой.

Не используйте FloatField для финансовых данных. Это чревато потерей точности из-за особенностей работы с плавающей точкой.

5. BooleanField

Это поле принимает только два значения: True или False.

class Product(models.Model):
    is_available = models.BooleanField(default=True)  # В наличии?

Бонус: атрибут default позволяет задать значение по умолчанию (в данном случае — товар доступен).

6. DateField и DateTimeField

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

class Event(models.Model):
    date = models.DateField()  # Только дата
    start_time = models.DateTimeField()  # Полная дата и время

Используйте DateField, если вам нужен только день, месяц и год. Если требуется учитывать ещё и время — отдавайте предпочтение DateTimeField.

7. EmailField

Это специализированное текстовое поле, которое валидирует ввод на соответствие формату email.

class User(models.Model):
    email = models.EmailField(unique=True)  # Уникальный email пользователя

Какая польза? Django проверяет, что вы не введёте "что-то_странное@вместо.email".

8. URLField

Для хранения ссылок используйте URLField. Оно автоматически проверяет, что введённая строка является корректным URL.

class Bookmark(models.Model):
    url = models.URLField()  

Если кто-то попробует ввести "непонятное.что", валидатор его смело завернёт.

9. ImageField и FileField

Эти поля позволяют сохранять изображения и файлы.

class Profile(models.Model):
    avatar = models.ImageField(upload_to='avatars/')  # Хранение аватаров пользователей
    resume = models.FileField(upload_to='resumes/')  # Хранение резюме

Атрибут upload_to определяет папку для хранения файлов. Эта магия работает в связке с settings.MEDIA_ROOT.

10. ForeignKey (Межмодельная связь)

Мы подробно разберём связи между моделями в отдельном дне, но для понимания: ForeignKey создаёт связь "многие к одному".

class Category(models.Model):
    name = models.CharField(max_length=100)

class Product(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

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

Атрибуты Полей (Ещё Немного Магии)

Давайте обратим внимание на то, какие атрибуты можно "прикрутить" к полям:

  • null=True: это позволит полю быть пустым в базе данных.
  • blank=True: определяет, должно ли поле быть обязательным при заполнении формы (на уровне валидации).
  • default: устанавливает значение по умолчанию.
  • unique=True: гарантирует уникальность значения в таблице базы.
  • choices: используется для ограничения значений поля. Работает как выпадающий список.

Пример:

class Product(models.Model):
    CATEGORY_CHOICES = [
        ('E', 'Electronics'),
        ('F', 'Furniture'),
    ]

    category = models.CharField(
        max_length=1,
        choices=CATEGORY_CHOICES,
        default='E',
    )

Выводы (Без ВЫВОДОВ)

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

1
Задача
Модуль 3: Django, 7 уровень, 2 лекция
Недоступна
Создание модели блоговых записей
Создание модели блоговых записей
1
Задача
Модуль 3: Django, 7 уровень, 2 лекция
Недоступна
Создание модели для онлайн-курсов
Создание модели для онлайн-курсов
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ