在Django中向内联管理员添加子节的方法?

时间:2017-02-01 22:51:19

标签: python django

所以就像标题所说的那样。我正在构建一个书籍结构,我希望在管理面板和编辑书籍对象时,可以查看和添加相关页面。页面本身也有相关的对象,称为部分,它们本质上是页面对象中的段落对象。

我的模型如下:

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的正确思维方式?如果这不是正确或理想的结构方法,那么正确的方法是什么?

1 个答案:

答案 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]