Как создать избирателя для голосования за один единственный выбор в опросе в Django - PullRequest
0 голосов
/ 08 декабря 2018
class Poll(models.Model):
    question = models.CharField(max_length=200)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)
    pub_date = models.DateTimeField(auto_now=True)
    expire_date = models.DateTimeField(blank=True, null=True)
    slug = models.SlugField(max_length=100)

    def _get_unique_slug(self):
        slug = slugify(self.question)
        unique_slug = slug
        num = 1
        while Poll.objects.filter(slug=unique_slug).exists():
            unique_slug = '{}-{}'.format(slug, num)
            num += 1
        return unique_slug

    def save(self, *args, **kwargs):
        self.slug = self._get_unique_slug()
        super().save(*args, **kwargs)

    def __str__(self):
        return self.question

    class Meta:
        ordering = ('-pub_date',)


class Choices(models.Model):
    poll = models.OneToOneField(Poll, related_name='choices')
    choice_text = models.CharField(max_length=200)
    voter = models.OneToOneField(User, on_delete=models.CASCADE, related_name='voters', blank=True, null=True)
    vote_count = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.choice_text

    def save(self, *args, **kwargs):
        self.vote_count += 1
        super().save(*args, **kwargs)

    class Meta:
        pass  #  order_with_respect_to = 'poll'

Он не позволяет пользователю голосовать более чем за один опрос.и если я изменю его на voter = models.Foriegnkey(User, on_delete=models.CASCADE, related_name='voters', blank=True, null=True), он позволяет пользователям голосовать более чем за один вариант в опросе, который не является предполагаемым поведением.Я буду признателен, если не смогу помочь исправить это.Спасибо.

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