我有以下型号:
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)
答案 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)