- ORM (Object-Relational Mapping): Позволяет взаимодействовать с базой данных, используя объекты Python (модели), вместо написания SQL-запросов напрямую.
- Модель: Класс Python, наследующийся от
django.db.models.Model
. Представляет таблицу в базе данных. - Поле модели: Атрибут класса модели. Представляет столбец в таблице.
- Экземпляр модели: Объект класса модели. Представляет строку в таблице.
# models.py from django.db import models class Person(models.Model): first_name = models.CharField(max_length=50, verbose_name="Имя") last_name = models.CharField(max_length=50, verbose_name="Фамилия") age = models.IntegerField(null=True, blank=True, verbose_name="Возраст") def __str__(self): return f"{self.first_name} {self.last_name}"
- Типы полей (
models.*
):CharField
: Текстовое поле (обязателенmax_length
).TextField
: Большое текстовое поле.IntegerField
: Целое число.BooleanField
: Логическое значение (True
/False
).DateTimeField
: Дата и время.DateField
: Дата.TimeField
: Время.DecimalField
: Десятичное число с фиксированной точностью (обязательныmax_digits
,decimal_places
).EmailField
: Строка для email (с базовой валидацией).FileField
: Поле для загрузки файлов (требует настройкиMEDIA_ROOT
иMEDIA_URL
).ImageField
: Специализированное поле для изображений (наследуется отFileField
, требует Pillow).ForeignKey
: Связь “один ко многим” с другой моделью.ManyToManyField
: Связь “многие ко многим”.OneToOneField
: Связь “один к одному”.AutoField
: Автоинкрементное целочисленное поле (обычно первичный ключid
, добавляется автоматически).SlugField
: Поле для хранения “слага” (короткой метки для URL).URLField
: Поле для хранения URL (с валидацией).UUIDField
: Поле для хранения UUID.
- Аргументы полей (наиболее частые):
max_length
: Максимальная длина (дляCharField
).null=True/False
: Разрешено ли хранитьNULL
в базе данных (по умолчаниюFalse
).blank=True/False
: Разрешено ли оставлять поле пустым в формах (валидация Django) (по умолчаниюFalse
).default
: Значение по умолчанию для поля.choices
: Итерируемый объект (например, список кортежей) для ограничения возможных значений поля (отображается как<select>
в админке).verbose_name
: Человекочитаемое имя поля (для админки, форм).unique=True/False
: Должно ли значение в этом поле быть уникальным в таблице.db_index=True/False
: Создавать ли индекс для этого поля в БД.primary_key=True/False
: Является ли поле первичным ключом.editable=True/False
: Будет ли поле отображаться в админке для редактирования.auto_now=True/False
: (ДляDateField
/DateTimeField
) Автоматически обновлять поле текущей датой/временем при каждом сохранении объекта (.save()
).auto_now_add=True/False
: (ДляDateField
/DateTimeField
) Автоматически устанавливать поле в текущую дату/время при первом создании объекта.- Для связей (
ForeignKey
,OneToOneField
):on_delete
: Действие при удалении связанного объекта (models.CASCADE
,models.PROTECT
,models.SET_NULL
,models.SET_DEFAULT
,models.DO_NOTHING
,models.SET(...)
).related_name
: Имя для обратной связи от связанной модели.
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰