Проблема такого рода обычно решается с помощью ссылки ForeignKey
.
# class name should begin with a capital letter and should be singular for a model
class Participant(models.Model):
username = models.CharField(max_length =50)
class Vote(models.Model)
vote_to = models.ForeignKey(Participant, on_delete=models.CASCADE, related_name='vote_to')
voted_by = models.ForeignKey(Participant, on_delete=models.CASCADE, related_name='voted_by')
date_time = models.DateTimeField(auto_now=True)
Каждый голос , сделанный участником , будет строкой в Votes
таблица или объект типа Vote
. Что-то вроде
vote = Vote(vote_to=some_participant_object,
voted_by=someother_participant_object)
vote.save()
auto_now=True
означает, что значение будет добавлено при создании объекта, поэтому вам не нужно обрабатывать, когда голосование было отдано.
Затем вы можете запросить количество голосов, отданных конкретным участником с использованием ORM.
Базового запроса c должно быть достаточно. Получите все голоса конкретного участника. Что-то вроде
# just as an idea here, the next lines might not be perfect
votes = Vote.objects.filter(voted_by__id=some_participant_id)
# or
votes = Vote.objects.filter(voted_by=some_participant_object)
# check the timestamp of the last vote and build logic accordingly
Таким образом будет проще писать запросы ORM для подсчета количества голосов, которые имеет конкретный участник, или количества голосов, отданных конкретным участником.