多级内联Django

时间:2015-09-15 06:52:00

标签: python django

这是我的模特

from django.db import models

class Page(models.Model):
    page_id = models.IntegerField(default=0)

class Question(models.Model):
    page = models.ForeignKey(Page)
    question = models.CharField(max_length=150)

class Option(models.Model):
    question = models.ForeignKey(Question)
    option = models.CharField(max_length=100)
    image_class = models.CharField(max_length=75)

这是我的admin.py

from django.contrib import admin
from .models import Page, Question, Option

class OptionInline(admin.StackedInline):
    model = Option
    extra = 1

class QuestionInline(admin.StackedInline):
    model = Question
    extra = 1
    inlines = [OptionInline]

class PageAdmin(admin.ModelAdmin):
    inlines = [QuestionInline]

admin.site.register(Page, PageAdmin)

基本上我希望这个多级关系在管理站点中显示为多级内联。有人可以帮忙吗

2 个答案:

答案 0 :(得分:0)

Django不支持开箱即用,但有一个名为django-nested-inline的项目可以完成这项工作。您也可以自己制定解决方案。

答案 1 :(得分:0)

Django 1.8提供InlineModelAdmin.show_change_link

,而不是使用嵌套的内联
from django.contrib import admin
from .models import Page, Question, Option

class OptionInline(admin.StackedInline):
    model = Option
    extra = 1

class QuestionInline(admin.StackedInline):
    model = Question
    extra = 1
    show_change_link = True


class PageAdmin(admin.ModelAdmin):
    inlines = [QuestionInline,]

admin.site.register(Page, PageAdmin)


class QuestionAdmin((admin.ModelAdmin):
    inlines = [OptionInline,]

admin.site.register(Question, QuestionAdmin)

这样,当您保存完成内联Page模型的Question模型时,名为“更改”的链接将显示在内联Question模型的已保存实例中。点击它,您将登陆Question模型实例的主页面,其中Option模型为内联。

当您完成内联Option模型并点击“保存并继续编辑”后,后退按钮会返回相关的Page实例。

还有a post描述了如果使用以前的Django版本,如何获得相同的结果。