Python 如何从Django车型中检查所选单选按钮的值是否正确?

Python 如何从Django车型中检查所选单选按钮的值是否正确?,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我正在用Django做一个测验应用程序。这是一个MCQ类型的问答应用程序,用户必须从多个答案列表中选择答案 现在,在my models.py中有三个模型: 测验 问题: 答复 当测验模型定义测验类型(例如基本、中级、高级)时,问题模型有一个用于指定问题类型的测验外键和一个用于提及问题文本的字符域。答案模型类似于问题模型,但使用ForeignKey of Question指定答案相关的问题,CharField指定答案文本,BooleanField指定答案是否正确 型号.py from djang

我正在用Django做一个测验应用程序。这是一个MCQ类型的问答应用程序,用户必须从多个答案列表中选择答案

现在,在my models.py中有三个模型:

  • 测验
  • 问题:
  • 答复
  • 当测验模型定义测验类型(例如基本、中级、高级)时,问题模型有一个用于指定问题类型的测验外键和一个用于提及问题文本的字符域。答案模型类似于问题模型,但使用ForeignKey of Question指定答案相关的问题,CharField指定答案文本,BooleanField指定答案是否正确

    型号.py

    from django.db import models
    
    # Create your models here.
    
    class Quiz(models.Model):
        q_name = models.CharField(max_length=30)
        desc = models.CharField(max_length=100)
    
        def __str__(self):
            return self.q_name
    
    class Question(models.Model):
        quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
        label = models.CharField(max_length=1000)
    
        def __str__(self):
            return self.label
    
    class Answer(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        text = models.CharField(max_length=1000)
        is_correct = models.BooleanField(default=False)
    
        def __str__(self):
            return self.text
    
    from django.shortcuts import render, redirect, reverse
    from django.contrib import messages
    from .models import Quiz, Question, Answer
    
    def basic_quest(request, quiz_name, ques_no):
        if request.method == "POST":
            guess = request.POST.get('answer')
            ans = Answer.objects.get(text = guess)
            if ans.is_correct == True:
                messages.success(request,("Correct"))
                return redirect('basic_quest')
            else:
                messages.error(request,("Wrong"))
        else:
            question = Question.objects.get(id = ques_no)
            answers = Answer.objects.filter(question = ques_no)
            return render(request, 'quest.html', {'question' : question, 'answers' : answers})
    

    视图.py

    from django.db import models
    
    # Create your models here.
    
    class Quiz(models.Model):
        q_name = models.CharField(max_length=30)
        desc = models.CharField(max_length=100)
    
        def __str__(self):
            return self.q_name
    
    class Question(models.Model):
        quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
        label = models.CharField(max_length=1000)
    
        def __str__(self):
            return self.label
    
    class Answer(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        text = models.CharField(max_length=1000)
        is_correct = models.BooleanField(default=False)
    
        def __str__(self):
            return self.text
    
    from django.shortcuts import render, redirect, reverse
    from django.contrib import messages
    from .models import Quiz, Question, Answer
    
    def basic_quest(request, quiz_name, ques_no):
        if request.method == "POST":
            guess = request.POST.get('answer')
            ans = Answer.objects.get(text = guess)
            if ans.is_correct == True:
                messages.success(request,("Correct"))
                return redirect('basic_quest')
            else:
                messages.error(request,("Wrong"))
        else:
            question = Question.objects.get(id = ques_no)
            answers = Answer.objects.filter(question = ques_no)
            return render(request, 'quest.html', {'question' : question, 'answers' : answers})
    
    quest.html

    {% extends 'base.html' %}
    
    {% block title %}
        Question - Quiz Python
    {% endblock title %}
    
    {% block content %}
        <div class="container">
            {% if messages %}
                {% for message in messages %}
                    <div class="alert alert-primary alert-dismissible fade show" role="alert">
                        {{ message }}
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                {% endfor %}
            {% endif %}
    
            <p><h1>{{ question.label }}</h1></p>
            <form method="POST">
                {% csrf_token %}
                {% for answer in answers %}
                <label><input type="radio" name="answer" value={{ answer.text }}> {{ answer.text }}</label>
                </br>
                {% endfor %}
                <input type="submit">
            </form>
        </div>
    {% endblock content %}
    
    {%extends'base.html%}
    {%block title%}
    问答游戏
    {%endblock title%}
    {%block content%}
    {%if消息%}
    {消息%中的消息为%s}
    {{message}}
    &时代;
    {%endfor%}
    {%endif%}
    {{question.label}

    {%csrf_令牌%} {答案中的答案为%} {{answer.text}
    {%endfor%} {%endblock内容%}
    使用单选按钮选择答案并单击“提交”后,我希望通过检查单选按钮的值以及答案模型中可用的答案,在同一页面上显示一条正确或不正确的消息

    但我得到了以下错误:

    NoReverseMatch at /quiz/Basic/1
    Reverse for 'basic_quest' with no arguments not found. 1 pattern(s) tried: ['quiz/(?P<quiz_name>[^/]+)/(?P<ques_no>[^/]+)$']
    Request Method: POST
    Request URL:    http://localhost:8000/quiz/Basic/1
    Django Version: 2.2.7
    Exception Type: NoReverseMatch
    Exception Value:    
    Reverse for 'basic_quest' with no arguments not found. 1 pattern(s) tried: ['quiz/(?P<quiz_name>[^/]+)/(?P<ques_no>[^/]+)$']
    Exception Location: /Users/apple/Desktop/myvenv/quiz/lib/python3.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 673
    Python Executable:  /Users/apple/Desktop/myvenv/quiz/bin/python
    Python Version: 3.7.4
    Python Path:    
    ['/Users/apple/Desktop/quiz',
     '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
     '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
     '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
     '/Users/apple/Desktop/myvenv/quiz/lib/python3.7/site-packages']
    
    NoReverseMatch at/quick/Basic/1
    与“基本任务”相反,未找到任何参数。尝试了1个模式:[“测验/(?P[^/]+)/(?P[^/]+)$”]
    申请方式:邮寄
    请求URL:http://localhost:8000/quiz/Basic/1
    Django版本:2.2.7
    异常类型:NoReverseMatch
    异常值:
    与“基本任务”相反,未找到任何参数。尝试了1个模式:[“测验/(?P[^/]+)/(?P[^/]+)$”]
    异常位置:/Users/apple/Desktop/myvenv/quick/lib/python3.7/site-packages/django/url/resolvers.py in_reverse_,带_前缀,第673行
    Python可执行文件:/Users/apple/Desktop/myvenv/quick/bin/Python
    Python版本:3.7.4
    Python路径:
    ['/Users/apple/Desktop/quick',
    “/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip”,
    “/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7”,
    “/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib dynload”,
    “/Users/apple/Desktop/myvenv/quick/lib/python3.7/site packages”]
    
    你能分享你定义URL“基本任务”的
    URL.py吗?看起来您正在尝试“反转”URL名称,但缺少一些参数。对不起,这是视图中的一个愚蠢错误。py我正在重定向到基本任务,但我忘记添加参数quick_name和ques_no现在工作正常。谢谢你的帮助,伙计。