За что отвечает Meta в сериализаторах Django
Что проверяют
Знаете ли вы, как ModelSerializer собирает поля из модели и где это настраивается. Заодно проверяют, отличаете ли вы Django от Django REST Framework: сериализаторы с Meta относятся к DRF. Следом обычно спрашивают, чем fields лучше exclude и почему extra_kwargs иногда не срабатывает.
Как отвечать
Meta это вложенный класс с настройками, а не метакласс. Метакласс там тоже есть, SerializerMetaclass, но он собирает объявленные поля, а Meta лишь хранит конфигурацию, которую читает ModelSerializer.
Основные атрибуты:
model: модель, по которой генерируются поля и валидаторы, включая проверки уникальности;fieldsилиexclude: одно из двух обязательно, без них DRF выдаст ошибку конфигурации.fields = "__all__"допустим, но включит всё, что появится в модели позже;read_only_fields: поля только для чтения.AutoFieldи поля сeditable=Falseи так read-only;extra_kwargs: параметры для автосгенерированных полей, например{"password": {"write_only": True}};depth: автоматическая вложенность связанных объектов, только на чтение;validators: валидаторы уровня объекта, напримерUniqueTogetherValidator;list_serializer_class: свойListSerializer, например для массового обновления.
У обычного Serializer поля из модели не генерируются, их объявляют вручную, и большая часть атрибутов Meta там не нужна.
Где спотыкаются
Объявляют поле явно и одновременно указывают его в extra_kwargs или read_only_fields. Для явно объявленных полей эти настройки игнорируются, параметры надо передавать в само поле.
Используют exclude или "__all__" в публичном API. Добавили в модель служебное поле, и оно без предупреждения уехало клиентам.
Считают depth бесплатным. Вложенные объекты без select_related и prefetch_related во вьюсете дают N+1 запросов, и Meta эту проблему не решает.