Проблема с отправкой сообщения в поле "многие ко многим

Я пытаюсь разместить объект комбинации, который ссылается на уже существующие объекты тегов. В основном я хочу, чтобы поле tag_id комбинации включало 2 идентификатора, ссылающихся на объекты Tag.

Вот мой код:

models.py

class Combination(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True)
    gameround = models.ForeignKey(Gameround, on_delete=models.CASCADE, null=True)
    resource = models.ForeignKey(Resource, on_delete=models.CASCADE, null=True)
    tag_id = models.ManyToManyField(Tag, null=True)
    created = models.DateTimeField(editable=False)
    score = models.PositiveIntegerField(default=0)

    objects = models.Manager()

    def __str__(self):
        return str(self.tag_id) or ''

serializers.py

class CombinationSerializer(serializers.ModelSerializer):
  tag_id = TagWithIdSerializer(many=True, required=False)
  resource_id = serializers.PrimaryKeyRelatedField(queryset=Resource.objects.all(),
                                                   required=True,
                                                   source='resource',
                                                   write_only=False)
  gameround_id = serializers.PrimaryKeyRelatedField(queryset=Gameround.objects.all(),
                                                    required=False,
                                                    source='gameround',
                                                    write_only=False)
  user_id = serializers.PrimaryKeyRelatedField(queryset=CustomUser.objects.all(),
                                               required=False,
                                               source='user',
                                               write_only=False)

  class Meta:
    model = Combination
    depth = 1
    fields = ('id', 'user_id', 'gameround_id', 'resource_id', 'tag_id', 'created', 'score')

  def create(self, validated_data):
    user = None
    request = self.context.get("request")
    if request and hasattr(request, "user"):
      user = request.user

    score = 0

    tag_data = validated_data.pop('tag_id')

    combination = Combination(
      user=user,
      gameround=validated_data.get("gameround"),
      resource=validated_data.get("resource"),
      created=datetime.now(),
      score=score
    )
    for tag_object in tag_data:
      combination.set(tag_id=tag_object)
    if len(combination.tag_id) == 2:
      return combination

  def to_representation(self, instance):
    rep = super().to_representation(instance)
    rep['tag_id'] = TagWithIdSerializer(instance.tag_id.all(), many=True).data
    return rep

Сейчас я получаю ошибку AttributeError : 'Combination' object has no attribute 'set'

Если я обновлю это:

for tag_object in tag_data:
      combination.set(tag_id=tag_object)

Нравится:

    for tag_object in tag_data:
      combination.tag_id.set(tag_id=tag_object)

Я получаю ошибку RecursionError maximum recursion depth exceeded while calling a Python object.

Как я могу избавиться от этого?

Для того, чтобы установить объекты в поле ManyToMany в Django, необходимо предварительно сохранить объект. Например, так

combination.save()

for tag_object in tag_data:
    combination.tag_id.add(tab_object)    
Вернуться на верх