python - 如何在 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)
解决方案
我已经使用-
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)
推荐阅读
- hibernate - 引用另一个复合键的 JPA 复合键
- include - rst 文件中的“.. 替换”是什么意思?
- powershell - 孩子的等待过程,有超时
- flutter - 如何在颤振中使用时区库将不同的国家时间(时区)设置为模拟时钟?
- css - 如何覆盖用户代理样式表(Chrome)以将溢出设置为对我的 svg 可见?
- websocket - GraphQL 订阅与 socket.io
- ios - 我怎样才能调配 UIView.init
- flutter - 颤振动画不渲染
- java - cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素'context:component-scan'的声明
- swiftui - 使用 NavigationLink 返回上一个屏幕,而不会丢失输入的数据