Skip to main content
 首页 » 编程设计

python之Django:获取所有对象并将其返回以查看

2024年09月03日38wuhuacong

我是 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)。