Skip to main content
 首页 » 编程设计

python之Django:在模型中创建子模型

2025年05月04日13lidabo

假设我有两个模型,Book 和 Page,Page 和 Book 之间是一对多的关系。我希望每个 Book 模型都有一个函数,可以为各自的 Book 模型创建一堆 Pages,但我不确定如何将每个 Pages 的外键关联回创建它的 Book 实例。

我目前有一个关联功能,可以在所有可能的书籍中找到正确的书籍,我确信有更好的方法,但我似乎找不到。是否可以将外键设置为自身?

请您参考如下方法:

class Page(models.Model): 
    # default related_name would be `page_set` but `pages` 
    # seems a bit more intuitive, your choice. 
    book = models.ForeignKey("yourapp.Book", related_name="pages") 
 
 
class Book(models.Model): 
    # ... 
 
    # you can use self as the instance and magically you have 
    # this `pages` attr which is a related manager, like `Page.objects` 
    # but limited to the particular Book's pages. 
    def special_page_create(self, *args, **kwargs): 
        self.pages.create( 
            # ... 
        ) 
        # ... 

然后,你有一个图书实例,你有一个相关的经理,

book = Book.objects.get(... 
book.pages.create(... 
page, created = book.pages.get_or_create(... 
pages_gte_42 = book.pages.filter(num__gte=42) 
# etc 

让我知道您还需要知道什么。反向关系是半神奇的;您没有在 Book 类上声明任何内容,但您在 Book 实例上获得了相关的管理器。