Курс → Урок 20 → Справочник
⚡ Кратко
📚 Подробно
⚡ Быстрая шпаргалка
# Типы полей практикума
CharField(max_length=N, unique=True)
EmailField(unique=True)
DecimalField(max_digits=10, decimal_places=2)
PositiveSmallIntegerField()
BooleanField(default=True)
DateField(null=True, blank=True)
DateTimeField(auto_now_add=True)
TextField(null=True, blank=True)
# Связи
ForeignKey(Model, on_delete=models.PROTECT, related_name='...')
OneToOneField(Model, on_delete=models.CASCADE, related_name='...')
OneToOneField(Model, null=True, on_delete=models.SET_NULL, related_name='...')
# Admin
@admin.register(Model)
class ModelAdmin(admin.ModelAdmin):
list_display = ['field1', 'field2']
search_fields = ['field1']
list_filter = ['field1']
ordering = ['field1']
list_editable = ['field2'] # поле должно быть в list_display!
Команды manage.py (раздел 1)
# Клонирование и настройка
git clone <URL>
cd <project-dir>
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # macOS/Linux
pip install -r requirements.txt
# Миграции
python manage.py migrate
python manage.py makemigrations <app> # после изменения models.py
python manage.py migrate
# Запуск
python manage.py runserver
Типы полей практикума
Поле
Назначение
Ключевые параметры
CharField
Строка ограниченной длины
max_length, unique
EmailField
Email с валидацией формата
unique
TextField
Длинный текст
null=True, blank=True
DecimalField
Точное десятичное число
max_digits, decimal_places
PositiveSmallIntegerField
Небольшое положительное целое (0–32767)
—
BooleanField
True/False
default
DateField
Только дата
null=True, blank=True
DateTimeField
Дата и время
auto_now_add=True, null=True
Связи и on_delete
# ForeignKey — много-к-одному
category = models.ForeignKey(
Category,
on_delete=models.PROTECT, # нельзя удалить Category, пока есть Product
related_name='products' # Category.products.all()
)
# OneToOneField — один-к-одному (CASCADE — удалить вместе)
product = models.OneToOneField(
Product,
on_delete=models.CASCADE,
related_name='details' # Product.details
)
# OneToOneField — один-к-одному (SET_NULL — обнулить)
address = models.OneToOneField(
Address,
null=True,
on_delete=models.SET_NULL,
related_name='customer'
)
Атрибуты ModelAdmin
Атрибут
Назначение
list_display
Колонки в списке объектов
search_fields
Поля для поиска (LIKE-запрос)
list_filter
Боковая панель фильтров
ordering
Сортировка в Admin-списке
list_editable
Редактировать прямо в списке (требует наличия в list_display)
Поиск по связанным полям в search_fields
# Двойное подчёркивание для обращения к связанной модели
search_fields = (
'customer__first_name', # Order → Customer.first_name
'customer__last_name',
'customer__email',
)