[英]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 column
的ForeignKey
定义到另一个模型,则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
以获取.author
的Author
对象( 例如 ,获取该Author
属性,修改作者等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.