Я пытаюсь создать приложение, в котором пользователи могут создавать «конкурсы» (думать о них как о выборах), заполнять бюллетени кандидатами, а затем голосовать за них, но вместо того, чтобы отдать один голос за одного кандидата, оцените их в порядок предпочтений.
Пока это моя модель:
class Contest(models.Model):
contest_text = models.CharField(max_length=350)
pub_date = models.DateTimeField('Start Date')
def __str__(self):
return self.contest_text
class Candidate(models.Model):
contest = models.ForeignKey(Contest, on_delete=models.CASCADE, related_name='candidates')
candidate_name = models.CharField(max_length=80)
def __str__(self):
return self.candidate_name
class Ballot(models.Model):
contest = models.ForeignKey(Contest, on_delete=models.CASCADE, related_name='ballots')
votes = models.ManyToManyField(Candidate, through='Preference')
class Preference(models.Model):
candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
ballot = models.ForeignKey(Ballot, on_delete=models.CASCADE)
candidate_preference = models.PositiveSmallIntegerField()
Однако я бы хотел, чтобы в таблице предпочтений не было двух строк для разных кандидатов, где предпочтения также одинаковы. То есть в том же избирательном бюллетене нельзя допускать, чтобы:
- Джон Доу, предпочтение = 1
- Foo Bar, предпочтение = 1
Нужно ли мне просто контролировать это в HTML, когда кто-то подает голос? Конечно, вышесказанное должно быть разрешено, но ТОЛЬКО если эти два голоса пришли от разных людей. Я бы предпочел контролировать это в базе данных, если это возможно.