在一個簡單的調查應用程序中,用戶應該只對一組問題(調查)投票一次。我可以檢查用戶是否投票(懶惰用戶或授權用戶),但只能在數據庫中預先填充測試數據的字段。我也知道一個懶惰的用戶可以刪除這個cookie並且能夠再次投票。檢查用戶是否投票,如果不保存投票
我不知道如何在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
。