Метод создания вложенного сериализатора Many-Many выполняет аналогичные n+1 запросы

У меня есть отношение "многие-ко-многим" между моделью User и моей пользовательской моделью Team. Где я могу добавить несколько пользователей в свою команду. Я использовал prefetch_related в моей модели команды, поэтому операция get (список) оптимизирована, в то время как операция post (создание) делает запрос каждый раз для пользователя. Ниже приведен мой код.

models.py

class Team(models.Model):
    team_name=models.CharField(max_length=50,blank=False,null=False)
    user=models.ManyToManyField(User,related_name='user')

    def __str__(self) -> str:
        return self.team_name

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username']

    def to_representation(self, instance):
        return [instance.id ,instance.username]

    def to_internal_value(self, data):
        try:
            return User.objects.get(id=data) # this queries the db for every user
        except Exception as e:
            print(e)
            raise serializers.ValidationError("User does not exists")

class TeamSerializer(serializers.ModelSerializer):
    user=UserSerializer(many=True) 
    class Meta:
        model=Team
        fields=('team_name','user')

    def create(self, validated_data):
        users = validated_data.pop('user')
        team = Team.objects.create(**validated_data)
        for user in users:
            team.user.add(user)
        return team

views.py

class TeamView(viewsets.ModelViewSet):
    queryset=Team.objects.all().prefetch_related('user')
    serializer_class=TeamSerializer

enter image description here как видно, для 7 пользователей, добавленных в команду, выполняется 7 запросов. как это можно оптимизировать? Любая помощь будет принята с благодарностью.

Вернуться на верх