从manytomany的扁平列表

时间:2017-06-16 15:17:50

标签: sql django many-to-many django-queryset outer-join

在由多个字段相关的2个模型上创建完全外部联接的最佳(最快)方法是什么。

例如一本书和一本作者(通常在这种情况下你会使用外键),但假设一本书可以有2位作者(为了得到我的案例)。

例如:

class Author(models.Model):
    books = models.ManyToManyField(Book,related_name='book_author')

class Book(models.Model):
    title = models.CharField()

现在我想创建一个列表:(最好是一个查询集)

author1 , book1
author1,  book2
author2,  book1
author2,  book3
author3,  book4

可能是因为星期五的时间,但需要一些帮助......

我想向api(DRF)提供平坦的结果,所以很高兴得到这个连接的查询集。

1 个答案:

答案 0 :(得分:1)

您正在尝试访问作者和图书(Book_authors)之间的auto-generated through model。你应该能够得到这样的结果

>>> Book.authors.through.objects.select_related('book', 'author')
<QuerySet [<Book_authors: Book_authors object>, ...>

要仅获取主键,您可以使用values_list

>>> Book.authors.through.objects.values_list('book', 'author')
<QuerySet [(1, 1), (1, 2), (1, 3)]>