Оберните конструктор сериализатора 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")