【问题标题】:Get all Foreign Keys of a Foreign Key in Django在Django中获取外键的所有外键
【发布时间】:2021-01-13 07:15:33
【问题描述】:

例如,

如果有一个模型 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)

【问题讨论】:

  • 可以加models.py
  • @BiploveLamichhane 已添加

标签: python django database foreign-keys


【解决方案1】:

要跨越关系,请使用跨模型的相关字段的字段名称,用双下划线分隔,直到找到所需的字段。” - django-docs

所以你可以这样做:

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

【讨论】:

  • 完美!谢谢!做.filter(book__bookshelf__pk=bookshelf.pk)会不会更高效一些?
  • 我不这么认为。
【解决方案2】:

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

上面的回答也很详细。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2014-04-25
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多