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',
    )

Висновки (Без ВИСНОВКІВ)

Типи полів — це основа будь-якої моделі. Їх грамотне використання забезпечує стабільність, зручність і безпеку вашого застосунку. Практикуйтеся з різними типами полів, експериментуйте з атрибутами і пам'ятайте: модель — це ваш план архітектора, а дані — це те, що оживляє ваш застосунок.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ