首页 > 解决方案 > 如何在 Django 中打开特定外键的层次结构子级?

问题描述

我是 Django 新手,正在尝试制作一个教育应用程序。我有一个模型层次结构为主题>级别>章节>主题>文章

我想在某个主题的特定级别的特定章节中添加有关特定主题的文章?如何打开特定 ForeignKey 的子项?例如,我想要这是管理面板,如果我点击一个主题,我会得到儿童级别,然后是儿童章节等等......

模型.py

from django.db import models


class Subject(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


class Level(models.Model):
    name = models.CharField(max_length=50)
    subject = models.ForeignKey(Subject, default=1, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.name



class Chapter(models.Model):
    name = models.CharField(max_length=50)
    level = models.ForeignKey(Level, default=1, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


class Topic(models.Model):
    name = models.TextField(max_length=50)
    chapter = models.ForeignKey(Chapter, default=1, null=True, on_delete=models.CASCADE

    def __str__(self):
        return self.name


class Article(models.Model):
    title = models.CharField(max_length=50)
    body = models.TextField()

    topic = models.ForeignKey(Topic, default=1, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

管理员.py

from django.contrib import admin

from .models import Level, Subject, Article, Chapter, Topic

admin.site.register(Level)
admin.site.register(Subject)
admin.site.register(Article)
admin.site.register(Chapter)
admin.site.register(Topic)

标签: pythondjangoadmin

解决方案


我已经使用-

https://github.com/theatlantic/django-nested-admin 管理员看起来像 -

class SubjectInline(nested_admin.NestedTabularInline):
    model = Subject
    extra = 1


class LevelInline(nested_admin.NestedTabularInline):
    inlines = [SubjectInline]
    model = Level
    extra = 1


class ChapterInline(nested_admin.NestedTabularInline):
    inlines = [LevelInline]
    model = Chapter
    extra = 1

class TopicInline(nested_admin.NestedTabularInline):
    inlines = [ChapterInline]
    model = Topic
    extra = 1

class ArticleAdmin(nested_admin.NestedModelAdmin):
    inlines = [TopicInline]
    model = Article
admin.site.register(Article, ArticleAdmin)

推荐阅读