간단한 설문 조사 앱 사용자는 일련의 질문 (설문 조사)에 대해 한 번만 투표해야합니다. 사용자가 투표 한 (게으른 사용자인지 아니면 권한이 부여 된 사용자인지) 확인할 수는 있지만 데이터베이스의 테스트 데이터로 필드를 채울 경우에만 확인할 수 있습니다. 나는 또한 게으른 사용자가 쿠키를 삭제하고 다시 투표 할 수 있음을 알고 있습니다.투표 한 사용자가 투표하지 않았는지 확인하십시오.
form.is_valid()
이후에 save()
을 호출하는 방법을 모르겠다. 두 번 호출 할 수 없기 때문이다.
models.py
class Vote(models.Model):
user = models.ForeignKey(User)
survey = models.ForeignKey(Survey)
vote = models.BooleanField(default=False) # not in use yet
def __unicode__(self):
return self.vote
views.py
@allow_lazy_user
def survey_detail(request, slug, template_name='survey.html'):
# allows only active surveys to be called otherwise displays HTTP 404
survey = get_object_or_404(Survey, is_active=True, slug=slug)
# checks for user id's in current survey
voter = [
v.user.id for v in Vote.objects.filter(survey=survey)
]
# checks if user already voted on survey
if request.user.id in voter:
# TODO: use different template or redirect
return render(request, 'index.html')
form = ResponseForm(request.POST or None, survey=survey)
if form.is_valid():
response = form.save(commit=False)
# gets the current user (lazy or not)
response.user = request.user
response.save()
# HOW DO I SAVE VOTER HERE?
return HttpResponseRedirect(reverse('survey:confirm', args=(slug,)))
data = {
'response_form': form,
'survey': survey
}
return render(request, template_name, data)
내가 가진 또 다른 생각이 모델에 부울 필드 vote
를 사용하여 템플릿의 True
또는 False
를 확인하는 것입니다.