Django: Как создать ListView, который будет принимать параметры для построения списка вопросов по другому шаблону? - PullRequest
0 голосов
/ 05 февраля 2019

Цель проекта, над которым я работаю, состоит в том, чтобы получить вопросы по физике в соответствии с тем, что хочет пользователь.Первый выбор заключается в том, к какой теме относятся искомые вопросы, а другой - к какому типу вопросов принадлежат эти вопросы.Однако, с помощью различных интернет-источников, я создал формы, и они выглядят великолепно.Но теперь я хотел бы получить результаты из этих форм, я знаю, что мне нужно создать view.py для результатов и превратить action в моих HTML файлах в GET.Но я не знаю, как будет выглядеть представление.

Это model.py из django.db, импорт моделей из home.choices import *

    # Create your models here.

    class Topic(models.Model):
        topic_name = models.IntegerField(
                        choices = question_topic_name_choices, default = 1)
        def __str__(self):
            return '%s' % self.topic_name

    class Image (models.Model):
        image_file = models.ImageField()

        def __str__(self):
            return '%s' % self.image_file

    class Question(models.Model):
        questions_type = models. IntegerField(
                        choices = questions_type_choices, default = 1)
        question_topic = models.ForeignKey(    'Topic',
                                        on_delete=models.CASCADE,
                                        blank=True,
                                        null=True)
        question_description = models.TextField()
        question_answer = models.ForeignKey(    'Answer',
                                        on_delete=models.CASCADE,
                                        blank=True,
                                        null=True)
        question_image = models.ForeignKey(    'Image',
                                        on_delete=models.CASCADE,
                                        blank=True,
                                        null=True)

        def __str__(self):
            return '%s' % self.question_type

    class Answer(models.Model):
        answer_description = models.TextField()
        answer_image = models.ForeignKey(    'Image',
                                        on_delete=models.CASCADE,
                                        blank=True,
                                        null=True)

        def __str__(self):
            return '%s' % self.answer_description

Это form.py, который содержит поля выбора, и из этих полей выбора я хочу получить результаты.

    from django import forms
    from betterforms.multiform import MultiModelForm
    from .models import Topic, Image, Question, Answer
    from .choices import questions_type_choices, question_topic_name_choices

    class TopicForm(forms.ModelForm):
        topic_name      =   forms.ChoiceField(
                        choices=question_topic_name_choices,
                        widget = forms.Select(
                        attrs = {'class': 'home-select-one'}
                            ))

        class Meta:
            model = Topic
            fields = ['topic_name',]
            def __str__(self):
                return self.fields


    class QuestionForm(forms.ModelForm):
        questions_type =   forms.ChoiceField(
                        choices= questions_type_choices,
                        widget = forms.Select(
                        attrs = {'class': 'home-select-two'},
                            ))

        class Meta:
            model = Question
            fields = ['questions_type',]
            def __str__(self):
                return self.fields


    class QuizMultiForm(MultiModelForm):
        form_classes    =   {
                    'topics':TopicForm,
                    'questions':QuestionForm
        }
        def save(self, commit=True):
            objects = super(QuizMultiForm, self).save(commit=False)

            if commit:
                topic_name = objects['topic_name']
                topic_name.save()
                questions_type = objects['question_type']
                questions_type.topic_name = topic_name
                questions_type.save()
            return objects

Это мой views.py для форм.

    from django.shortcuts import render, render_to_response
    from django.views.generic import CreateView
    from home.models import Topic, Image, Question, Answer
    from home.forms import QuizMultiForm



    def QuizView(request):
        if request.method == "POST":
            form = QuizMultiForm(request.POST)
            if form.is_valid():
                pass
        else:
            form = QuizMultiForm()
        return render(request, "index.html", {'form': form})

Этоhtml файл

{% extends 'base.html' %}
  {% block content %}
        <form  method="GET" action="views_results.py">
          {% csrf_token %}
          {{ form.as_p }}
        </form>
    {% endblock content %}

Вот мои urls.py

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('ask/', ask_page_url, name = 'ask_page'),
        path('home/', home_page_url, name = 'home_page'),
        path('download/', download_url, name = 'download_page'),
    ]

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете передавать переменные в шаблон из шаблона

В основном шаблоне

{% for question in questions %}
    {% include "main/q.html" with question=question %}
{% endfor %}

и в q.html

<h1>{{ question }}</h1>
...