Встречается на собеседованиях • сегодня

Какие возникали ошибки при использовании Django ORM

Распространённые ошибки в Django ORM:

  1. N+1 проблема - когда для каждого объекта делается отдельный запрос к связанной таблице. Решается select_related() (ForeignKey) или prefetch_related() (ManyToMany).
python
# Плохо (N+1 запросов)
books = Book.objects.all()
for book in books:
    print(book.author.name)  # Новый запрос для каждого автора

Хорошо (1 запрос)

books = Book.objects.select_related('author').all()

text

2. **Использование `filter()` вместо `get()` для одного объекта** - `filter()` возвращает QuerySet, даже если объект один. Для одного объекта лучше `get()`.

3. **Неэффективные массовые операции** - создание объектов в цикле вместо `bulk_create()`.

4. **Ошибки с `null` и `blank`** - путаница между этими параметрами моделей. `null` - для БД, `blank` - для валидации форм.

5. **Игнорирование `transaction.atomic()`** - приводит к частичным обновлениям при ошибках.

6. **Использование `len(queryset)` вместо `queryset.count()`** - `len()` загружает все объекты в память.

7. **Забывают про `only()` и `defer()`** - загрузка всех полей, когда нужны только некоторые.

8. **Неправильное использование `Q()` объектов** - сложные запросы могут генерировать неоптимальный SQL.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы