假设我有这些:
class Publication(models.Model):
title = models.CharField(max_length=128)
author = models.ManyToManyField(Author, through='Authorship')
class Author(models.Model):
first_name = models.CharField(db_index=True, max_length=64)
last_name = models.CharField(db_index=True, max_length=64)
如何在一次查询中获取所有出版物及其作者。我想在页面上列出每个出版物及其作者。但我不想为每篇出版物都打到作者表。
我知道的唯一方法是select_related
在视图和authorship_set.all()
模板上。但这是每个出版物的一个查询。我可以使用原始 sql 轻松完成,但这很糟糕。
*顺便说一句,我正在使用直通模型,因为我必须在其中保留一些额外的数据,例如author_display_order
.
编辑:
原来authorship_set
是在做所有的查询。
当我从控制台以这种方式运行它时,只会触发一个查询:
pubs = Publication.objects.all().prefetch_related('author')
for p in pubs:
print p.title
for a in p.author.all():
print a.last_name