Короткий ответ
get() возвращает ровно один объект и выбрасывает исключения DoesNotExist или MultipleObjectsReturned, если число записей не совпадает. filter() возвращает QuerySet со всеми подходящими объектами, и пустой результат для него нормален.
Как это работает подробнее
Методы различаются ожидаемым числом записей и типом результата.
- get(). Уместен, когда условие гарантированно выделяет единственную запись, например первичный ключ: Student.objects.get(id=1).
- filter(). Возвращает QuerySet с одной, несколькими или ни одной записью, который можно дальше уточнять и сортировать.
- Исключения. DoesNotExist и MultipleObjectsReturned обрабатываются через try/except с классами исключений Django.
- Тип результата. get() сразу даёт экземпляр модели, а filter() — ленивый QuerySet, который выполняется при обращении к данным.
Пример кода
get() и filter() на практике
# get(): ровно один объект
student = Student.objects.get(id=1)
print(student.name)
# filter(): QuerySet из всех подходящих объектов
students = Student.objects.filter(course='CSE')
for student in students:
print(student.name)Что использовать на практике
- Уникальные поля. Используй get() для поиска по id или другому уникальному полю.
- Произвольный набор. Используй filter(), когда результат может быть пустым или множественным.
- Обработка ошибок. Оборачивай get() в try/except, если записи может не оказаться.