我正在尝试设计我的第一个数据库,但遇到了一些困难。设计如下:您有一个作者可以拥有多本书。每本书可以有许多页面。每个页面可以有许多图片。每个页面都是唯一的(
这是我的models.py的样子:
在我的管理界面中,我希望在作者页面上显示作者编写的所有书籍。同样,在书籍页面上,我希望显示一本书的所有页码等等。因此,我的admin.py看起来像这样:
ForeignKey
)。图片可能不是唯一的(您可以在不同的页面/书中使用相同的图片,因此这应该是ManyToMany
)。我的问题是,当使用Inlines
时,我无法将图片设置为ManyToManyField
。
如果我将ForeignKey更改为ManyToMany,我会收到异常“<class 'books.models.Picture'> has no ForeignKey to <class 'books.models.Page'>
”。我看了一下这里和这里,但不知道如何在我的情况下应用它。这是我的models.py的样子:
class Author(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField()
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=50)
class Page(models.Model):
book = models.ForeignKey(Book)
contents = models.TextField(max_length=15999)
class Picture(models.Model):
page = models.ForeignKey(Page) # ideally, this should be many-to-many
picture_uuid = models.CharField(max_length=36)
在我的管理界面中,我希望在作者页面上显示作者编写的所有书籍。同样,在书籍页面上,我希望显示一本书的所有页码等等。因此,我的admin.py看起来像这样:
class PictureAdmin(admin.ModelAdmin):
list_display = ('id', 'picture_uuid')
class PictureInline(admin.TabularInline):
model = Picture
class PageAdmin(admin.ModelAdmin):
list_display = ('id', 'page_uuid')
inlines = [
PictureInline,
]
class PageInline(admin.TabularInline):
model = Page
class BookAdmin(admin.ModelAdmin):
list_display = ('id', 'title')
inlines = [
PageInline,
]
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'email')
inlines = [
BookInline,
]
ModelAdmin
的excludes
中。 - Chris Prattraw_id_fields
。InlineModelAdmin
(大部分)与常规的ModelAdmin
具有完全相同的功能。例如,像字段集、排除等等这些东西都可以在InlineModelAdmin
上定义,就像在ModelAdmin
上一样。 - Chris Prattthrough
模型上的字段不是"pictures",而是picture
。 - Chris Pratt