让我说我有这些:
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,但那很难吃。
* BTW,我正在使用直通模型,因为我必须在那里保留一些额外的数据,例如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