所以就像标题所说的那样。我正在构建一个书籍结构,我希望在管理面板和编辑书籍对象时,可以查看和添加相关页面。页面本身也有相关的对象,称为部分,它们本质上是页面对象中的段落对象。
我的模型如下:
class Textbook(models.Model):
founder = models.CharField(max_length=256)
title = models.CharField(max_length=256)
cover = models.ImageField(upload_to=get_image_path, blank=True, null=True)
def __str__(self):
return self.title
class Page(models.Model):
textbook = models.ForeignKey(Textbook,related_name="pages")
page_title = models.CharField(max_length = 256)
page_num = models.IntegerField()
def __str__(self):
return self.page_title
class Section(models.Model):
page = models.ForeignKey(Page,related_name="sections")
section_title = models.CharField(max_length=256)
text = models.TextField(max_length = 1024)
image = models.CharField(max_length = 256)
def __str__(self):
return self.section_title
理想情况下,教科书添加/修改面板中会添加一个新的页面按钮,然后我可以将该部分添加到之前提到的页面。
目前的admin.py:
class PageInline(admin.TabularInline):
model = Page
class TextbookAdmin(admin.ModelAdmin):
inlines = [
PageInline,
]
admin.site.register(Textbook,TextbookAdmin)
admin.site.register(Section)
是否有一个内置的方法,如嵌套内联可以使用或者我只是没有考虑Django的正确思维方式?如果这不是正确或理想的结构方法,那么正确的方法是什么?
答案 0 :(得分:0)
如果你想保留结构,也许最简单的解决方案是使用Django Nested Inline package,从而将所有内容保存在一个视图中。
from django.contrib import admin
from nested_inline.admin import NestedStackedInline, NestedModelAdmin
from .models import Textbook, Page, Section
class SectionInline(NestedStackedInline):
model = Section
extra = 1
class PageInline(NestedStackedInline):
model = Page
extra = 1
inlines = [SectionInline]
@admin.register(Textbook)
class TextbookAdmin(NestedModelAdmin):
inlines = [PageInline]