добавить новую запись отношения многих ко многим в структуре отдыха django - PullRequest
0 голосов
/ 02 октября 2018

Я пытался добавить новое отношение ко многим записям, например,

У меня есть следующие модели:

models.py

class Team(models.Model):
    name = models.CharField(blank=True, unique=True, max_length=100)
    players = models.ManyToManyField(User, blank=True, related_name='players')



class TeamInvite(models.Model):
    from_user = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='invite_by', blank=True, null=True)
    to_user = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='invite_to', blank=True, null=True)
    team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name='invite_to_team', blank=True, null=True)
    status = models.NullBooleanField(blank=True, null=True, default=None,)

и мой сериализатор:

serializers.py

class TeamInviteCreateSerializer(serializers.ModelSerializer):
    team = serializers.PrimaryKeyRelatedField(queryset=Team.objects.all())
    from_user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
    class Meta:
      model = TeamInvite
      fields = ('id', 'from_user', 'to_user', 'team', 'status')

после этого пользователь, который в to_user будет предпринимать действия для TeamInvite, такие как принять или отклонить.

Мне нужен сериализатор, который будет приниматьновый пользователь и добавьте его в существующую команду, как следующий сериализатор:

class TeamInviteAcceptDeclineSerializer(serializers.ModelSerializer):
    method_name = serializers.SerializerMethodField()

    class Meta:
        model = TeamInvite
        fields = ('id', 'from_user', 'date_time', 'team', 'method_name', 'status')

    def get_method_name(self, *args, **kwargs):
        method_name = None  # kwargs['context']['request'].method_name
        return method_name

    def update(self, instance, validated_data):
        instance.team = validated_data.get('team', instance.team)
        method_name = validated_data.get('method_name')
        instance.status = validated_data.get('status', instance.status)
        instance.to_user = validated_data.get('to_user', instance.to_user)

        if method_name == 'decline':
            instance.status = False
        else:
            instance.status = True
            team = Team.objects.get(pk=instance.team.pk)
            team.players.add(instance.to_user)
            # team.players.create(team_id=team, user_id=instance.to_user)
            team.save()
        instance.save()
        return instance

update функция не добавляет пользователя в существующую команду и не вызывает никаких ошибок.Что мне здесь не хватает?

мой запрос был:

{
    "from_user": 1,
    "to_user": 23
    "team": 64,
    "method_name": "accept",
    "status": null
}

спасибо

1 Ответ

0 голосов
/ 02 октября 2018

Я получил пропущенную точку в своем коде .. она была в:

class TeamInviteAcceptDeclineSerializer(serializers.ModelSerializer):
    method_name = serializers.SerializerMethodField()

    class Meta:
        model = TeamInvite
        fields = ('id', 'from_user', 'date_time', 'team', 'method_name', 'status')

fields = пропущенная коляска to_user

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...