Django:一个查询中的所有对象和所有M2M相关字段

时间:2014-07-16 18:39:42

标签: django m2m django-select-related

让我说我有这些:

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

0 个答案:

没有答案