【问题标题】:How to open heirarchy children of specific foreignKey in Django?如何在 Django 中打开特定外键的层次结构子级?
【发布时间】:2019-05-08 06:58:52
【问题描述】:

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

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

models.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

admin.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)

【问题讨论】:

  • 您将需要使用嵌套内联:请参阅此答案stackoverflow.com/questions/3681258/…
  • 谢谢,但它让事情变得更复杂..
  • 使用它并不复杂。尝试习惯在 django 中实现第三方模块 - 它会让你的生活更轻松。

标签: python django admin


【解决方案1】:

我已经实现了这一点 -

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)

【讨论】:

  • 从@ger.s.brett 提到的链接复制粘贴
猜你喜欢
  • 2013-11-08
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多