1

假设我有这些:

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
4

0 回答 0