【发布时间】:2012-02-12 07:22:05
【问题描述】:
我正在尝试设计我的第一个数据库,但有点卡住了。设计如下:你有一个可以有很多书的作者。每本书可以有很多页。每个页面可以有很多图片。每个页面都是唯一的 (ForeignKey)。图片可能不是唯一的(您可以在不同的页面/书籍中使用相同的图片,所以应该是ManyToMany)。 我的问题是使用Inlines 时无法将图片设为ManyToManyField。
如果我将 ForeignKey 更改为 ManyToMany,则会收到异常“<class 'books.models.Picture'> has no ForeignKey to <class 'books.models.Page'>”。我看过here 和here,但不知道如何在我的情况下应用它。
这就是我的 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,
]
【问题讨论】:
标签: database django postgresql django-models django-admin