Как я могу вернуть идентификатор всего объекта и помещены в объекты my_result? [Джанго] - PullRequest
0 голосов
/ 23 января 2020

, когда я отправляю эту форму, мне всегда возвращается только значение идентификатора 1, а когда я пытался заменить другое значение, которое я написал 2, мне действительно возвращалось это значение. потом я понял, что этот процесс l oop не работает, и я знал это из-за (возврата). Итак, мне нужно знать, как я могу вернуть идентификатор всего объекта и поместить его в объекты my_result

views.py

from django.shortcuts import render
from .models import Section, Question, Result
from django.http import HttpResponseNotFound


def index(request):
    text = "this is from views of exam app!"
    return render(request, 'exam/index.html', {'text': text})


def section_list(request):
    try:
        sections = Section.objects.all()
    except:
        return HttpResponseNotFound("Error")
    return render(request, 'exam/section.html', {'portals': sections})


def my_question(request, q_id):
    sections = Section.objects.get(id=q_id)
    template_name = 'exam/question.html'

    try:
        answer = request.POST['answer']
        for result in Result.objects.all():
            result_id = result.result_question_id
            my_result = Result.objects.filter(id=result_id)
            return render(request, template_name, {'repr': repr(my_result)})
    except:
        return render(request, template_name, {'sections': sections, 'error_message': 'You have to select one of the following answer'})
    return render(request, template_name, {'sections': sections})

urls.py

from . import views
from django.urls import path
from django.conf.urls import url

app_name = "exam"

urlpatterns = [
    # /index/
    path('', views.index, name="index"),
    # /index/section/
    path('portal/', views.section_list, name="portal"),
    # /index/question/10/
    path(r'question/<int:q_id>/', views.my_question, name="question"),
]

моделей. py

from django.db import models


class Section(models.Model):
    portal = models.CharField(max_length=100)

    def __str__(self):
        return self.portal


class Question(models.Model):
    section = models.ForeignKey(Section, on_delete=models.CASCADE)
    question = models.CharField(max_length=100)
    choice = models.BooleanField(default=False)
    ans1 = models.CharField(max_length=100)
    ans2 = models.CharField(max_length=100)
    ans3 = models.CharField(max_length=100)
    ans4 = models.CharField(max_length=100)

    def __str__(self):
        return self.question


class Result(models.Model):
    result_question = models.ForeignKey(Question, on_delete=models.CASCADE)
    result = models.CharField(max_length=100)

    def __str__(self):
        return self.result

вопрос. html

{% extends 'base.html' %}

{% block title %} Question Page {% endblock %}

{% block body %}
{% if error_message %}
    <div class="notes">
        <div class="container">
            <div class="alert alert-info">
                <strong>Info!</strong> {{ error_message }}
            </div>
        </div>
    </div>
{% endif %}

    <div class="questions">
        <div class="container">
            {% for section in sections.question_set.all %}
                <h2>{{ section.question }}</h2>
                <form method="post">
                {% csrf_token %}
                    <div class="answer">
                        <input type="radio" name="answer" id="{{ section.ans1 }}" value="{{ section.ans1 }}">
                        <label for="{{ section.ans1 }}">{{ section.ans1 }}</label>
                        {% if false_answer %}
                            <span class="false-message">{{ false_answer }}</span>
                        {% elif true_answer %}
                            <span class="true-message">{{ true_answer }}</span>
                        {% endif %}
                    </div>

                    <div class="answer">
                        <input type="radio" name="answer" id="{{ section.ans2 }}" value="{{ section.ans2 }}">
                        <label for="{{ section.ans2 }}">{{ section.ans2 }}</label>
                        {% if false_answer %}
                            <span class="false-message">{{ false_answer }}</span>
                        {% elif true_answer %}
                            <span class="true-message">{{ true_answer }}</span>
                        {% endif %}
                    </div>

                    <div class="answer">
                        <input type="radio" name="answer" id="{{ section.ans3 }}" value="{{ section.ans3 }}">
                        <label for="{{ section.ans3 }}">{{ section.ans3 }}</label>
                        {% if false_answer %}
                            <span class="false-message">{{ false_answer }}</span>
                        {% elif true_answer %}
                            <span class="true-message">{{ true_answer }}</span>
                        {% endif %}
                    </div>

                    <div class="answer">
                        <input type="radio" name="answer" id="{{ section.ans4 }}" value="{{ section.ans4 }}">
                        <label for="{{ section.ans4 }}">{{ section.ans4 }}</label>
                        {% if false_answer %}
                            <span class="false-message">{{ false_answer }}</span>
                        {% elif true_answer %}
                            <span class="true-message">{{ true_answer }}</span>
                        {% endif %}
                    </div>
                    <button class="btn btn-success">Next</button>


                {{ section.id }}
                {{ result.result_question_id }}
                </form>

            {% endfor %}

            {% if repr %}
                {{ repr }}
            {% endif %}

        </div>
    </div>

{% endblock %}

1 Ответ

1 голос
/ 23 января 2020

Мне нужно знать, как вернуть идентификатор всего объекта и поместить его в объекты my_result

Удалить возврат из l oop. Превратите my_result в массив прямо перед для l oop. Заменить my_result = Result.objects.filter(id=result_id) на my_result.append(Result.objects.filter(id=result_id)). После для l oop поместите туда свой ответ, и my_result будет иметь список результатов, которые вы хотите.

    my_result = []
    for result in Result.objects.all():
        result_id = result.result_question_id
        my_result.append(Result.objects.get(id=result_id))
    return render(request, template_name, {'repr': repr(my_result)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...