Пытаюсь получить количество (количество) вопросов о конкретных данных и использовал эту информацию для проверки значения поля ввода в шаблоне Django

#mysql #django #django-views #django-templates #django-orm

Вопрос:

в моем проекте у меня есть таблица с вопросами по конкретным темам и подтемам. Я хочу посчитать количество вопросов по каждой подтеме для определенного идентификатора темы. здесь у меня есть запрос с именем подтемы, который содержит информацию о подтемах определенной темы, а другой-список с именем totall, который содержит общее количество вопросов по подтемам, которые присутствуют в запросе с именем подтемы .

в моделях.py таблица вопросов

 class Questions(models.Model):
    grade = models.ForeignKey(Add_Grade,on_delete=models.CASCADE,  default = 1)
    topic = models.ForeignKey(Add_Topics, on_delete= models.CASCADE , default = 1)
    sub_topic = models.ForeignKey(Sub_Topics, on_delete= models.CASCADE, default = 1)
    question = models.CharField(max_length=100)
    image= models.URLField(null=True)
    difficulty=models.CharField(max_length=100, default='')

    class Meta:
        db_table = 'questions'
 

в views.py

 def showassess(request):
    if request.method=='POST':
        classname=request.POST.get("classname")
        topicid=request.POST.get("topicid")
        topicname=request.POST.get("topicname")
     
        print(topicname,topicid)
        gradeid=request.POST.get("gradeid")
        subtopics=Sub_Topics.objects.filter(topic__id=topicid)
        print(subtopics)
        listt=list(Sub_Topics.objects.values_list('id',flat=True).filter(topic__id=topicid))
        q=0
        totall=[]
        for p in listt:
            if q <= len(listt):
                totalques=Questions.objects.filter(sub_topic__id=listt[q]).count()
                totall.append(totalques)
                q=q 1
        
        #totalques=Questions.objects.filter(sub_topic__in=listt)
        print(listt)
        
        print(totall)#list contain no of questions of each subtopic having specic topic_id
        context={
            'totall':totall,
            'topicid':topicid,
            'topicname':topicname,
            'classname':classname,
            'gradeid':gradeid,
            'subtopics':subtopics,
        }
        return render(request,"assessment.html",context)
 

выход есть

[1, 2, 3, 4]—>список (содержит идентификатор подтемы )

[3, 2, 1, 1]—>всего (всего нет вопросов по подтемам, упомянутым выше[например: подтема, имеющая идентификатор = 1, имеет

всего 3 вопроса ,подтема id=2 есть 2 вопроса]

в шаблоне я просто хочу просто проверить отсутствие вопросов, которые пользователь вводит в поле ввода номера для каждой подтемы из числа вопросов, которые оцениваются выше в views.py.цель состоит в том, чтобы ограничить пользователя, чтобы он мог ввести правильное отсутствие вопросов. В контексте views.py, У меня есть запрос с именем подтемы и список, содержащий общее количество вопросов по каждой подтеме, присутствующей в запросе. как я могу использовать эти данные для получения требуемого результата или есть ли лучший способ получить требуемый сценарий.

 <div class="card text-center">
  <div class="card-header">
    Subtopics of {{topicname}}
  </div>
  <div class="card-body">
    <form  id="assessment" action="selectassess" method="POST">
    {% csrf_token %}
    {% for t in subtopics %}
    
        <input type="hidden" name="classname" value="{{classname}}">
        <input type="hidden" name="gradeid" value="{{gradeid}}">
        <input type="hidden" name="topicname" value="{{topicname}}">
        <input type="hidden" name="topicid" value="{{topicid}}">
    
    
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="assess" value="{{t.id}}" >
            <label class="form-check-label" for="assess">{{t.subtopic}} {{p}}</label>
        </div>
        
        <input type="number" placeholder="No of ques to be selected" min="0" max="10" name="quesno" width="60"><br>
    
    
    {% endfor %}

    </form>
  </div>
  <div class="card-footer">
    <input class="btn btn-primary" form="assessment" type="submit" value="Submit">
  </div>
</div>