У меня есть модель:
class Vote(models.Model):
text = models.CharField(max_length=300)
voters = models.ManyToManyField(CustomUser, blank=True, related_name="voters")
voters_voted = models.ManyToManyField(CustomUser, blank=True, related_name="voted")
game = models.ForeignKey(Game, on_delete=models.CASCADE)
in_favour = models.PositiveIntegerField(default=0)
against = models.PositiveIntegerField(default=0)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
queryset = self.game.players
for player in queryset:
self.voters.add(player)
И форма голосования, которая имеет следующий метод form_valid:
def form_valid(self, form):
game = Game.objects.get(id=foo)
vote = Vote.objects.get(id=bar)
if form.cleaned_data['choice'] == 'Y':
vote.in_favour += 1
else form.cleaned_data['choice'] == 'N':
vote.against += 1
vote.voters.remove(self.request.user) #This line doesn't work
vote.voters_voted.add(self.request.user)
vote.save()
return super().form_valid(form)
Цель этого состоит в том, чтобы отследить, за кого проголосовали пользователи, кто имеет право голосовать и каково голосование (за / против).
Все в этом коде работает отлично, за исключением строки, которая удаляет пользователей из группы избирателей при отправке формы (vote.voters.remove(self.request.user)
). Следующая строка, добавляющая пользователя в группу, за которую проголосовали (vote.voters_voted.add(self.request.user)
), работает отлично.
Я пытался поместить вторую vote.save()
между этими двумя строками, но это не имело никакого значения. Я не понимаю, почему вторая строка работает, а первая нет!