如何在两个模型之间显示一组数据?

How to display one set of data between two models?

我有模型问答。 我想要完成的是能够以这样的方式在模板中显示它。我想知道一种方法来实现这一点。我尽力不让它在模型中循环整个数据,而是一次循环一个数据。我正在尝试制作 qna 数据并将其显示在模板上。所以在答案数据之前显示所有 Questio 数据并不是我想要的。这两个模型必须一一说明。我有点接近了......但我仍然无法弄清楚如何实现这一目标。任何帮助或建议将不胜感激。提前谢谢你。

Q.title

Q.body

A.body

Q.title

Q.body

A.body

Q.title

Q.body

A.body

modesl.py

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Question(models.Model):
    title= models.CharField(max_length= 100)
    body= models.TextField()
    date_posted= models.DateTimeField(default=timezone.now)
    author= models.ForeignKey(User, on_delete= models.CASCADE)

    def __str__(self):
        return self.title

class Answer(models.Model):
    body= models.TextField()
    question= models.ForeignKey(Question, on_delete= models.CASCADE)
    date_posted= models.DateTimeField(default=timezone.now)
    author= models.ForeignKey(User, on_delete= models.CASCADE)

    def __str__(self):
        return self.body

qna.html 模板

{% extends "info/base.html" %}
{% block content %}

{% for question in questions %}
        <h1> Q</h1>
        <h3> {{ question.title }} </h3>
  {% for answer in answers %}
    <h1> A </h1> 
    <h3> {{ answer.body }}</h3>
  {% endfor %}

{% endfor %}




{% endblock content %}

views.py

from django.shortcuts import render
from .models import Question, Answer

def qna(request):
    context= {
        'questions': Question.objects.all(),
        'answers': Answer.objects.all(),
    }
    return render(request, 'qna/qna.html', context) 

related_name 添加到具有 ForeignKeyQuestion 的模型 Answer

question= models.ForeignKey(Question, on_delete= models.CASCADE, related_name='my_answes')

在 HTML 文件中将第二个循环替换为 :

{% for answer in question.my_answes.all %}
   <h1> A </h1> 
   <h3> {{ answer.body }}</h3>
   <hr>
{% endfor %}

由于 Answer 模型具有外键与问题的关系,您可以直接访问 reverse.Replace 您在 html 中的代码中的问题模型字段,如下所示,并检查是否同样适用于您。

{% extends "info/base.html" %}
{% block content %}
{% for answer in answers %}
        <h1> Question:</h1>
        <h3> title:  {{ answer.question.title }} </h3>
        <h3> body: {{ answer.question.body }} </h3>
        <h1> Answer: </h1><h3> {{ answer.body }} </h3>
{% endfor %}

{% endblock content %}