Модель — это воплощение понятия предметной области в коде приложения. В Django ORM каждая модель представлена классом в коде и таблицей в базе данных:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
class User(AbstractBaseUser):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=100, null=True)
last_name = models.CharField(max_length=100)
nickname = models.CharField(max_length=20, null=True)
# ^ таким образом описанные атрибуты класса называют "полями"
password = models.CharField(max_length=100)
USERNAME_FIELD = 'email'
- Модель представляется классом только в языках с классами. Технически она может быть чем угодно в зависимости от языка.
- Поля модели описывают одноимённые столбцы таблицы и одновременно являются свойствами (properties) класса, что позволяет им следить, например, за присваиваемыми полям значениями. В других ORM и других языках столбцы могут быть описаны иначе.
- Связь "Модель-Таблица" — это особенность паттерна Active Record. В другом подходе, называемом Data Mapper, всё может быть по-другому.
Единственное, что нужно для работы модели — создать таблицу в базе данных. Для чего, в свою очередь, потребуется миграция. Django генерирует миграции по команде makemigrations
и применяет по команде migrate
:
poetry run python manage.py makemigrations