Django外键vs复杂查询

时间:2016-11-21 18:09:32

标签: django django-models

我有以下型号:

class Library(models.Model):
    title = models.CharField(max_length = 255)

class Author(models.Model):
    name = models.CharField(max_length = 255)

class Book(models.Model):
    name = models.CharField(max_length = 255)
    library_id = models.ForeignKey(Library)
    author_id = models.ForeignKey(Author)
  1. 如何获取特定图书馆中作者的作者列表?
  2. 作者是否更有效地将外键直接存入图书馆?

1 个答案:

答案 0 :(得分:0)

您可以使用reverse lookups across the Foreign Key relationships获取特定图书馆中作者的作者列表。

some_library = Library.objects.get(0)
authors_in_library = Author.objects.filter(book__library_id=some_library)

您不应向作者添加library字段。这是过早优化并且会使事情复杂化,因为如果将书籍移动到新库,您将需要更新两个关系而不是一个关系。您还必须在交易中进行所述更新。除非您面临重大的可测量性能问题,否则不要考虑这一点。

另外,请勿在字段中添加_id个后缀。他们被视为Django中的实际对象关系。它还会与Django adds its own _id to foreign keys进行仅id查找这一事实相冲突。您的查询应如下所示,不包含_id

Author.objects.filter(book__library=some_library)