查询django中列表视图的外键表

时间:2018-05-25 19:56:32

标签: python django

我是django的新手。我有一个django安装,我正在尝试在django中为一些数据库表创建一个UI。

在我的数据库中有两个表 - 文章和作者。 Articles表具有Author表的外键,字段名称为author_id。

我设法创建了一个列出文章的ListView类。代码是这样的:

from .models import Article

class ArticleListView(ListView):
    template_name = "article.html"
    context_object_name = 'articles'
    paginate_by = 25

    def get_queryset(self):
        queryset = Article.objects.all().order_by('-created_at')
        return queryset 

然后在视图中我循环文章查询集并打印其字段,这很好。但是我不知道如何查询相应的Author表以获取作者姓名和详细信息。谁能帮助我了解如何做到这一点?我阅读了很多关于此的文档/教程,但我无法解决如何做到这一点。非常感谢任何帮助。

请注意:文章模型是由早期的django程序员编写的。

1 个答案:

答案 0 :(得分:4)

如果为另一个模型定义名称为ForeignKey的{​​{1}},则Django将构造一个名为column的数据库列,以获取相关对象的主键。但您可以使用column_id获取相关对象(不是.column,而是id的相应对象。)

您可以更改模板,例如:

id

(当然,<h1>Articles</h1> <ul> {% for article in object_list %} <li>{{ article.pub_date|date }} - {{ article.headline }} - {{article.author.name}}</li> {% empty %} <li>No articles yet.</li> {% endfor %} </ul>有一个author字段。

由于您将在此处获取所有作者对象,因此在这种情况下对查询集执行name通常会更有效:

prefetch_related(..)

您可以在任何class ArticleListView(ListView): template_name = "article.html" context_object_name = 'articles' paginate_by = 25 def get_queryset(self): queryset = (Article.objects .all() .prefetch_related('author') .order_by('-created_at')) return queryset 实例上调用.author来获取与其相关的Article对象(例如,获取该作者的属性,修改作者等。)。