问题描述
例如,
如果模型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
上面的答案也很详细。