在Django中获取外键的所有外键

问题描述

例如,

如果模型Bookshelf的外部键为Books可以访问的模型bookshelf.books,而Book模型的外部键为Author(可通过book.authors访问),我如何从书架上获得所有作者?

示例模型。py

class Bookshelf(models.Model):
    pass

class Book(models.Model):
    bookshelf = models.ForeignKey(Bookshelf,related_name='books',on_delete=models.CASCADE)

class Author(models.Model):
    book = models.ForeignKey(Book,related_name='authors',on_delete=models.CASCADE)

我可以做到:

author_qs = QuerySet(Author)
for book in my_bookshelf.books.all():
    author_qs |= book.authors.all()

但是我怀疑这是非常有效的。

我们非常感谢您的帮助。 (如果有关系,我正在使用Postgres)

解决方法

要跨越一个关系,请在各个模型之间使用相关字段的字段名称,并用双下划线分隔,直到找到所需的字段为止。”-django-docs

因此您可以这样做:

queryset = Author.objects.filter(book__bookshelf=bookshelf)
,

我相信可以在此答案中找到解决方案: https://stackoverflow.com/a/37515546/14349691

上面的答案也很详细。