繁体   English   中英

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

[英]query foreign key table for list view in 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程序员编写的。

如果将带有name columnForeignKey定义到另一个模型,则Django将构造一个名为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'
    paginate_by = 25

    def get_queryset(self):
        return Article.objects..prefetch_related( 'author' ).order_by('-created_at')

因此,您可以在任何Article 实例上调用.author以获取.authorAuthor对象( 例如 ,获取该Author属性,修改作者等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM