Django跨联合过滤器ManyToMany关系

时间:2019-10-25 08:24:38

标签: python django orm

我的模型。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)

我的网址:

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 %}

我尝试制作一个页面,其中将显示问题和相关的投票。 我在模板中将Question.choice_set_all与ManyToOne关系成功。

但是这不仅会导致选择问题 enter image description here

1 个答案:

答案 0 :(得分:0)

您根本不需要这样做。 question已经是相关问题的访问者,您无需比较文本。只需q.choice_set.all()