Оберните конструктор сериализатора DRF

Допустим, у меня есть следующий сериализатор Django REST Framework:

class MySerializer(serializer.ModelSerializer):
    items = serializers.SerializerMethodField()
    users = UserSerializer(many=True)

    class Meta:
        model = MyModel
        fields = ("id", "items", "users")

Я хочу обернуть конструктор сериализатора в queries_disabled из django-zen-queries, чтобы убедиться, что все данные были префетчированы и нет нарушений N+1.

Как я могу это сделать?

Есть несколько рабочих процессов сериализации, которые могут выполнять ненужные запросы, поэтому необходимо украсить несколько методов:

  • is_valid как точка входа процесса валидации (to_internal также называется inside).
  • to_internal как точка входа для преобразования из репрезентации (запись данных).
  • to_representation как точка входа для преобразования из внутреннего (чтение данных).
  • .

Также существует метод save() (вызывает create(), update()), но я думаю, что вы не хотите отключать здесь запросы.

Самый короткий пример:

from django.utils.decorators import method_decorator


@method_decorator(queries_disabled(), name='is_valid')
@method_decorator(queries_disabled(), name='to_internal')
@method_decorator(queries_disabled(), name='to_representation')
class MySerializer(serializer.ModelSerializer):
    items = serializers.SerializerMethodField()
    users = UserSerializer(many=True)

    class Meta:
        model = MyModel
        fields = ("id", "items", "users")
Вернуться на верх