Ограничение по времени Django для голосования

#django

#django

Вопрос:

У меня есть приложение для голосования, как я могу установить временные ограничения, чтобы я мог голосовать в течение ограниченного периода времени, после чего опрос будет закрыт?

models.py

 class Poll(models.Model):
    question = models.TextField()
    option_one = models.CharField(max_length=50)
    option_two = models.CharField(max_length=50)
    option_three = models.CharField(max_length=50)
    option_one_count = models.IntegerField(default=0)
    option_two_count = models.IntegerField(default=0)
    option_three_count = models.IntegerField(default=0)

    def total(self):
        return self.option_one_count   self.option_two_count   
      self.option_three_count
 

views.py

 def create(request):
    if request.method == 'POST':
        form = CreatePollForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect ('home')

    else:   
        form = CreatePollForm()
    context = {'form':form}
    return render(request, 'poll/create.html', context)


def vote(request, poll_id):
    poll = Poll.objects.get(pk=poll_id)
    if request.method == 'POST':
        selected_option = request.POST['poll']
        if selected_option == 'option1':
            poll.option_one_count  = 1
        elif selected_option == 'option2':
            poll.option_two_count  = 1
        elif selected_option == 'option3':
            poll.option_three_count  = 1
        else:
            return HttpResponse(400, 'Invalid form')
        poll.save()
        return redirect('results', poll.id)    
    context = {'poll':poll}
    return render(request, 'poll/vote.html', context)
 

Комментарии:

1. Пожалуйста, поделитесь мнением, в котором вы голосуете.

2. @Willem Van Onsem добавьте просмотры

Ответ №1:

Это только псевдокод / и мысли, но он укажет вам правильное направление.

Ваша модель захочет включить:

  • active_from поле, которое является датой и временем.
  • active_for открыто поле, в котором будет указана продолжительность голосования (возможно, секунды).

Затем вы можете выполнить некоторые базовые вычисления, чтобы определить, должен ли опрос быть активным.

 class Poll(models.Model):
    ...

    @property
    def is_active(self):
        return (datetime.datetime.now() - self.active_from).seconds > active_for
 

По вашему мнению, теперь вы можете использовать экземпляр модели для внесения изменений в представление.

В вашей функции голосования вы можете сделать что-то вроде:

 def vote(request, poll_id):
    poll = Poll.objects.get(pk=poll_id)
    if request.method == 'POST':
        if poll.is_active:
            # Do logic around counting a vote
        else:
            # Do vote closed logic
    ...


 

В вашем шаблоне вы сможете использовать свойство в синтаксисе шаблонов django, это будет что-то вроде этого:

 {% if poll.is_active %}