Django: подсчет отправленных форм
Что я хотел бы сделать с моей моделью, это иметь HTML страницу, где показать моим пользователям, сколько вопросов в форме они отправили и сколько они все еще отсутствуют (у меня пять в моем оригинальном шаблоне, здесь я воспроизвожу только два), а также для администратора, чтобы увидеть, сколько пользователей в целом отправили формы, вот мой код:
**HTML**
{% extends "base.html" %}
{% block content %}
<main>
<div class="container">
<div class="table-responsive text-nowrap">
<h2>Submission</h2>
Total: {{ quest_done }}/2
{% if user.is_superuser %}
Total Question 1: {{ question1_count }}
Total Question 2: {{ question2_count }}
{% endif %}
</div>
</main>
{% endblock %}
**question.models.py**
class QuestionOne(models.Model):
user = models.OneToOneField(UserInformation, blank=True, null=True, on_delete=models.CASCADE)
question_1a = models.CharField(max_length=250, choices=point)
question_2a = models.CharField(max_length=250, choices=point)
question_3a = models.CharField(max_length=250, choices=point)
quest_1_submitted = models.BooleanField(default=False)
def __str__(self):
return self.name + '_question_1'
class QuestionTwo(models.Model):
user = models.OneToOneField(UserInformation, blank=True, null=True, on_delete=models.CASCADE)
question_1b = models.CharField(max_length=250, choices=point)
question_2b = models.CharField(max_length=250, choices=point)
question_3b = models.CharField(max_length=250, choices=point)
quest_2_submitted = models.BooleanField(default=False)
def __str__(self):
return self.name + '_question_2'
**question.views.py**
quest_done = 0
quest_count = 0
def question_one(request):
if request.method == 'POST':
form = QuestionOneForm(request.POST, request.FILES)
if form.is_valid():
questionnairename.quest_1_submitted = True
question1_count = QuestionOne.objects.all().count()
form.instance.user = request.user
form.save()
messages.success(request, 'Form submitted')
if questionnairename.quest_1_submitted == True:
quest_done += 1
return redirect('home')
else:
form = QuestionnaireNameForm()
return render(request, 'quest.html', {'form': form, 'quest_count': quest_count, 'question1_count': question1_count})
def question_two(request):
if request.method == 'POST':
form = QuestionTwoForm(request.POST, request.FILES)
if form.is_valid():
questionnairename.quest_2_submitted = True
question2_count = QuestionTwo.objects.all().count()
form.instance.user = request.user
form.save()
messages.success(request, 'Form submitted')
if questionnairename.quest_2_submitted == True:
quest_done += 1
return redirect('home')
else:
form = QuestionnaireNameForm()
return render(request, 'quest.html', {'form': form, 'quest_count': quest_count, 'question2_count': question2_count})
ОШИБКИ:
local variable 'quest_done' referenced before assignment
и у меня нет ошибок для переменных "question_count", но когда я пытаюсь показать это в моем html Это просто пустое место. Заранее спасибо за помощь
Вы можете создать функцию, которая проверяет для каждой модели, отправил ли пользователь форму или нет
def return_quest_done_count(user):
count = 0
count += 1 if QuestionOne.objects.filter(user=user,quest_1_submitted=True) else 0
...
return count
Затем вы можете вызвать функцию как
def question_one(request):
quest_done = return_quest_done_count(request.user)
....