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
然后在视图中我循环文章查询集并打印它的字段,这工作正常。但是我不确定如何查询相应的作者表以获取作者姓名和详细信息。谁能帮我理解如何做到这一点?我阅读了很多关于此的文档/教程,但我无法理解如何做到这一点。很感谢任何形式的帮助。
请注意:文章模型是由早期的 django 程序员编写的。
解决方案
如果你给另一个模型定义了一个ForeignKey
带有名字的名字column
,那么Django会用名字构造一个数据库列column_id
来获取相关对象的主键。但是您可以使用.column
来获取相关对象(所以不是id
,而是 that 的对应对象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(..)
作者对象,因此在这种情况下对查询集执行 a 通常更有效:
class ArticleListView(ListView):
template_name = 'article.html'
paginate_by = 25
def get_queryset(self):
return Article.objects..prefetch_related(
'author'
).order_by('-created_at')
因此,您可以调用.author
任何Article
实例来获取Author
与其相关的对象(例如获取该作者的属性、修改作者等)。
推荐阅读
- amazon-web-services - 无法通过 cloudformation 设置 cognito userpool 客户端的属性
- db2 - 可以访问 DB2 的用户是否也可以访问 OS400?
- git - phpcs 仅对 git blame 值
- c++ - 在 C++ 中模拟导入作为来自 python 的功能
- riscv - 火箭芯片指令跟踪列
- javascript - 将清晰的文本渲染为 three.js 纹理
- linux - 比较两个文件并应用差异
- ruby - 无法在 IntelliJ for Mac 上安装和使用 Ruby 插件
- web-crawler - 将抓取限制在种子 url 的子页面
- python - Python:在没有硬编码值的情况下关联标签、常量名和整数