Django через совместный фильтр отношения ManyToMany - PullRequest
0 голосов
/ 25 октября 2019

Мои модели.py:

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField()
    def get_all():
        return Question.objects.all()
    def get_detail(question_id):
        return Question.objects.get(pk=question_id)

class Choice(models.Model):
    question = models.ManyToManyField(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)  

мои просмотры:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
import datetime
from .models import Question, Choice

def DetailView(request, question_id):
    q = Question.get_detail(question_id)
    choices = Choice.objects.filter(question__question_text = q.question_text)  
    #I also try question__pk == question_id
    context = {"qs":q, "choices":choices}
    return render(request, "detail_question.html", context)

Мой URL:

path('detail/<int:question_id>', views.DetailView, name = 'detail'),

Мои шаблоны:

{% extends "base.html" %}
{% block content123 %}
        {% if qs %}
        <h1>{{ qs.question_text }}</h1>
        <form action="">
            <ul>
            {% for choice in choices %}
            <li><input type="radio" value="{{ qs.id }}" name="choice">{{ choice.choice_text }}<li>
            {% endfor %}
            </ul>
            <p><input type="submit" name="submit"</p>
        </form>
        {% endif %}

{% endblock %}

Я пытаюсь создать страницу, на которой будет отображаться вопрос и соответствующий голос. У меня получилось успешно установить отношения ManyToOne с question.choice_set_all в шаблоне.

Но это не делает выбор только в вопросе введите описание изображения здесь

1 Ответ

0 голосов
/ 25 октября 2019

Вам не нужно делать это вообще. question уже является средством доступа к связанным вопросам, вам не нужно сравнивать текст. Просто сделай q.choice_set.all().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...