django通过外键访问另一个模型

时间:2015-02-09 04:47:51

标签: django django-admin

假设我有模特:

Class Author(models.Model):
    id = models.PositiveIntegerField()
    dob = models.DateField() 

Class Note(models.Model):
    note = models.TextField()
    author = models.ForeignKey(Author)

Class Book(models.Model):
    name = models.CharField()
    pubdate = models.DateField()
    author = models.ForeignKey(Author)

在admin.py中:

Class BookInline(admin.StackedInline):
    model = Book

Class NoteInline(admin.StackedInline):
    model = Note

Class AuthorAdmin(admin.ModelAdmin):
    model = Author
    inlines = [BookInline, NoteInline]

Class BookAdmin(admin.ModelAdmin):
    model = Book

用户需要从AuthorAdmin页面输入数据,并具有输入图书数据的内联。

理想情况下,我希望笔记文本字段成为Book模型的一部分,但大多数时候它不太可能被使用。

所以我认为为了数据库效率,我会把它移到一个单独的表中。如果没有正确工作的嵌套内联(我尝试了现有的软件包并遇到了已知的错误),上面的设置就可以了(即将Note附加到Author而不是Book)。

然而,当我使用BookAdmin时,我看不到任何音符(因为它是作者的外键,而不是Book)。有没有一种方法可以编辑给定书籍记录中与作者相关的任何笔记?

更新

根据以下评论,我添加了以下外键注意:
Class Note(models.Model): note = models.TextField() author = models.ForeignKey(Author) book = models.ForeignKey(Book)

然后
Class BookAdmin(admin.ModelAdmin): model = Book inlines = [NoteInline]

这允许我访问BookAdmin中的注释字段。

但是,当我从AuthorAdmin输入注释时,不会在BookAdmin中显示此注释,而是显示一个新的空白注释字段。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为如果书籍和笔记之间存在关系。它应该在域模型中表示。如果笔记总是有书,那么它们应该与书而不是作者有关系。

文档建议使用generic relations as an inline,但这将是一种荒谬的限制和回合方法。