⚡ Быстрая шпаргалка
python manage.py makemigrations — создать миграцию
python manage.py migrate — применить миграции
python manage.py createsuperuser — создать суперпользователя
python manage.py shell — интерактивная оболочка Django
admin.site.register(Model) — зарегистрировать модель в Admin
Команды manage.py
| Команда | Описание |
python manage.py makemigrations |
Создать файлы миграций на основе изменений в models.py |
python manage.py makemigrations <app> |
Создать миграцию только для указанного приложения |
python manage.py migrate |
Применить все не применённые миграции к БД |
python manage.py migrate <app> <migration> |
Применить миграцию до указанного номера (откат) |
python manage.py showmigrations |
Показать список миграций и статус применения |
python manage.py sqlmigrate <app> <name> |
Показать SQL-запросы, которые сгенерирует миграция |
python manage.py createsuperuser |
Создать суперпользователя для Admin-панели |
python manage.py shell |
Запустить интерактивную Python-оболочку с контекстом Django |
python manage.py dbshell |
Запустить интерактивную оболочку БД (psql, sqlite3) |
python manage.py runserver |
Запустить сервер разработки на http://127.0.0.1:8000/ |
Типы полей Django (все из лекции)
Строковые поля
| Поле | SQL-тип | Обязательные параметры |
CharField | VARCHAR(n) | max_length |
TextField | TEXT | — |
EmailField | VARCHAR(254) | — |
SlugField | VARCHAR(50) | — |
URLField | VARCHAR(200) | — |
Числовые поля
| Поле | SQL-тип | Параметры |
IntegerField | INTEGER | — |
BigIntegerField | BIGINT | — |
SmallIntegerField | SMALLINT | — |
PositiveIntegerField | INTEGER (≥0) | — |
PositiveSmallIntegerField | SMALLINT (≥0) | — |
FloatField | DOUBLE PRECISION | — |
DecimalField | NUMERIC(m,d) | max_digits, decimal_places |
BigAutoField | BIGSERIAL | — |
AutoField | SERIAL | — |
Логические поля
| Поле | SQL-тип | Примечание |
BooleanField | BOOLEAN | Актуально |
NullBooleanField | BOOLEAN NULL | Устарело → BooleanField(null=True) |
Поля дата/время
| Поле | SQL-тип | Полезные параметры |
DateField | DATE | auto_now, auto_now_add |
TimeField | TIME | auto_now, auto_now_add |
DateTimeField | DATETIME / TIMESTAMP | auto_now, auto_now_add |
DurationField | BIGINT (мкс) | Хранит Python timedelta |
Поля связей
| Поле | Связь | Обязательные параметры |
ForeignKey | N:1 (многие к одному) | to, on_delete |
ManyToManyField | N:M (многие ко многим) | to |
OneToOneField | 1:1 (один к одному) | to, on_delete |
Значения on_delete:
| Значение | Поведение при удалении родителя |
CASCADE | Удалить дочерние объекты |
PROTECT | Запретить удаление, если есть зависимые объекты |
SET_NULL | Установить NULL (нужен null=True) |
SET_DEFAULT | Установить значение по умолчанию |
DO_NOTHING | Ничего не делать (может нарушить целостность) |
Общие параметры полей
| Параметр | По умолчанию | Описание |
null | False | Разрешает NULL в базе данных |
blank | False | Разрешает пустое значение в форме |
choices | — | Набор допустимых вариантов значений |
default | — | Значение по умолчанию |
primary_key | False | Сделать первичным ключом |
unique | False | Уникальное значение в таблице |
verbose_name | — | Читаемое имя поля для Admin |
help_text | — | Подсказка в Admin и формах |
db_index | False | Создать индекс для поля |
editable | True | Разрешить редактирование в Admin |
error_messages | — | Кастомные сообщения об ошибках |
validators | [] | Список валидаторов |
unique_for_date | — | Уникальность в пределах даты |
unique_for_month | — | Уникальность в пределах месяца |
unique_for_year | — | Уникальность в пределах года |
Регистрация модели в Admin
# myapp/admin.py
from django.contrib import admin
from .models import Book
# Простая регистрация
admin.site.register(Book)
# Расширенная регистрация с ModelAdmin
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date', 'in_stock')
list_filter = ('in_stock', 'genre')
search_fields = ('title', 'author')
ordering = ('-published_date',)