如何在两个模型之间显示一组数据?
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
添加到具有 ForeignKey
和 Question
的模型 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 %}
我有模型问答。 我想要完成的是能够以这样的方式在模板中显示它。我想知道一种方法来实现这一点。我尽力不让它在模型中循环整个数据,而是一次循环一个数据。我正在尝试制作 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
添加到具有 ForeignKey
和 Question
的模型 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 %}