Выбор ответа Junior Django REST Framework спрашивают часто обновлено
Чем опасен fields = "__all__"
Вопрос
Чем опасно fields = "__all__" в ModelSerializer публичного API?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Новые поля модели сами попадут в ответ и на запись, включая служебные. Добавили в модель isstaff, internalcomment или discountoverride, и они без ревью API ушли наружу, а неотмеченные readonly ещё и принимаются на запись (mass assignment).
Варианты ответа
- DRF не поддерживает это значение у
ModelSerializerи выдаст ошибку - Ответ станет медленнее в несколько раз из-за сериализации всех связей
- Сериализатор перестанет валидировать данные и пропустит всё как есть
- Новые поля модели сами попадут в ответ и на запись, включая служебныеправильный ответ
Разбор
Добавили в модель is_staff, internal_comment или discount_override, и они без ревью API ушли наружу, а неотмеченные read_only ещё и принимаются на запись (mass assignment). Явный список fields делает контракт API видимым. Значение поддерживается, валидация работает, скорость почти не меняется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.