Выбор ответа Junior Django REST Framework спрашивают часто обновлено

Чем опасен fields = "__all__"

Вопрос

Чем опасно fields = "__all__" в ModelSerializer публичного API?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Новые поля модели сами попадут в ответ и на запись, включая служебные. Добавили в модель isstaff, internalcomment или discountoverride, и они без ревью API ушли наружу, а неотмеченные readonly ещё и принимаются на запись (mass assignment).

Варианты ответа

  1. DRF не поддерживает это значение у ModelSerializer и выдаст ошибку
  2. Ответ станет медленнее в несколько раз из-за сериализации всех связей
  3. Сериализатор перестанет валидировать данные и пропустит всё как есть
  4. Новые поля модели сами попадут в ответ и на запись, включая служебныеправильный ответ

Разбор

Добавили в модель is_staff, internal_comment или discount_override, и они без ревью API ушли наружу, а неотмеченные read_only ещё и принимаются на запись (mass assignment). Явный список fields делает контракт API видимым. Значение поддерживается, валидация работает, скорость почти не меняется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.