我是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程序员编写的。
答案 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
对象(例如,获取该作者的属性,修改作者等。)。