python manage.py shell # Django Shell
python manage.py makemigrations # создать миграции
python manage.py migrate # применить миграции
python manage.py createsuperuser # суперпользователь
Model.objects.create(...) # создать и сохранить
Model.objects.all() # все записи
Model.objects.filter(field=value) # фильтрация
Model.objects.get(pk=1) # одна запись
Model.objects.filter(...).update(...) # массовое обновление
Model.objects.filter(...).delete() # массовое удаление
manage.py — ключевые команды
Команда
Действие
python manage.py runserver
Запустить сервер разработки
python manage.py startapp <name>
Создать приложение
python manage.py makemigrations
Создать файлы миграций
python manage.py migrate
Применить миграции к БД
python manage.py showmigrations
Просмотр состояния миграций
python manage.py createsuperuser
Создать суперпользователя
python manage.py shell
Django Shell (интерактивный REPL)
ORM — методы QuerySet
Метод
Возвращает
Описание
.all()
QuerySet
Все записи таблицы
.filter(**kwargs)
QuerySet
Отфильтрованные записи
.exclude(**kwargs)
QuerySet
Исключить совпадения
.get(**kwargs)
Model instance
Ровно одна запись (DoesNotExist / MultipleObjectsReturned)
.first()
Model or None
Первая запись
.last()
Model or None
Последняя запись
.count()
int
Количество записей
.exists()
bool
Есть ли хотя бы одна запись
.values(*fields)
QuerySet[dict]
Словари вместо объектов
.order_by(*fields)
QuerySet
Сортировка (- для обратной)
.update(**kwargs)
int
Массовое обновление
.delete()
(int, dict)
Удаление QuerySet
.create(**kwargs)
Model instance
Создать и сохранить
.bulk_create(objs)
list
Массовое создание
.bulk_update(objs, fields)
int
Массовое обновление объектов
Lookups — условия фильтрации
Lookup
Описание
field__exact=v
Точное совпадение
field__iexact=v
Совпадение без учёта регистра
field__contains=v
Содержит подстроку (регистр важен)
field__icontains=v
Содержит подстроку (регистр не важен)
field__in=[...]
Входит в список
field__gt=v
Больше чем v
field__gte=v
Больше или равно v
field__lt=v
Меньше чем v
field__lte=v
Меньше или равно v
field__isnull=True
Значение NULL
field__startswith=v
Начинается с v
field__istartswith=v
Начинается с v (без регистра)
field__endswith=v
Заканчивается на v
field__iendswith=v
Заканчивается на v (без регистра)
field__range=[a, b]
В диапазоне [a, b] включительно
Классы Q и F
from django.db.models import Q, F
# Q: логические операторы
Model.objects.filter(Q(a=1) | Q(b=2)) # OR
Model.objects.filter(Q(a=1) & Q(b=2)) # AND
Model.objects.filter(~Q(a=1)) # NOT
# F: операции над полями
Model.objects.update(price=F('price') * 1.1)
Model.objects.filter(discounted__lt=F('price'))