Skip to main content
 首页 » 编程设计

python之多级内联 Django

2024年10月24日37softidea

这是我的模型

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) 

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

请您参考如下方法:

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 版本,您将如何获得相同的结果。