#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 %}