Метод создания вложенного сериализатора 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
как видно, для 7 пользователей, добавленных в команду, выполняется 7 запросов. как это можно оптимизировать? Любая помощь будет принята с благодарностью.