我是 python 和 Django 的新手,我也在寻找答案,但找不到 :( 我的应用程序中有 3 个类。 我的应用程序中的第一个类是考试、问题和答案。
模型.py
class Egzam(models.Model):
name = models.CharField(max_length=200, default='kolokwium ')
date = models.DateField('date publish')
code = models.CharField(max_length=200)
def __str__(self):
return str("%s %s" % (self.date, self.name))
class Question(models.Model):
egzam = models.ForeignKey(Egzam, on_delete=models.CASCADE)
name = models.CharField(max_length=200) # nazwa pytania
def __str__(self):
return self.name
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
answer_text = models.CharField(max_length=200) #treść odpowiedzi
correct = models.BooleanField(default=False)
def __str__(self):
return self.answer_text
所以 Egzam 类可以处理很少的问题,而问题类可以处理很少的答案。我想要做的是在索引页面上列出所有考试,在我点击其中一个之后,我的应用程序应该打开新页面,我可以在其中看到该特定考试的所有问题和答案。而且我不知道如何将特定考试的所有问题和答案返回到一个 html。这是我的其余代码。
网址.py
app_name = 'kolos'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:pk>/', views.EgzamView.as_view(), name='view'),
]
View .py
class IndexView(generic.ListView):
template_name = 'kolos/index.html'
context_object_name = 'egzam_list'
def get_queryset(self):
return Egzam.objects.all()
class EgzamView(generic.DetailView):
model = Egzam
template_name = 'kolos/egzam.html'
def get_queryset(self):
return Answer.obects.filter()
请您参考如下方法:
你可以这样尝试:
在模板 kolos/egzam.html
{% for question in object.question_set.all %}
{{ question.name }}
{% for answer in question.answer_set.all %}
{{ answer.answer_text }}
{{ answer.correct }}
{% endfor %}
{% endfor %}
并从 EgzamView 中移除 get_queryset 方法。
请参阅Many to one关于反向查询如何工作的查询部分(使用 _set)。
