gpt4 book ai didi

python - 在 Django 中查询 ListView 的外键表

转载 作者:太空狗 更新时间:2023-10-30 02:53:11 30 4
gpt4 key购买 nike

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

然后在 View 中我循环 Article 查询集并打印它的字段,这工作正常。但是我不确定如何查询相应的作者表以获取作者姓名和详细信息。任何人都可以帮助我了解如何做到这一点吗?我阅读了很多关于此的文档/教程,但我无法全神贯注于如何做到这一点。非常感谢任何帮助。

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

最佳答案

如果你为另一个模型定义了一个名为columnForeignKey,那么Django将构造一个名为column_id的数据库列来获取相关对象的主键。但是你可以使用.column来获取相关对象(所以不是id,而是那个id对应的对象)。

因此您可以更改模板,例如:

<h1>Articles</h1>
<ul>
{% for article in object_list %}
<li>{{ article.pub_date|date }} - {{ article.headline }}
<b> - {{article.author.name}}</b></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.<b>.prefetch_related(
'author'
)</b>.order_by('-created_at')

因此,您可以在任何 Article instance 上调用 .author 来获取与其相关的 Author 对象(例如获取该作者的属性、修改作者等)。

关于python - 在 Django 中查询 ListView 的外键表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536050/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com