0

I am new to Django and trying to make an educational App. I have a Model heirarchy as Subject>Level>Chapter>Topic>Article

I want to add Articles on specific Topic in a Specific Chapter of a specific Level in a Subject? How is it possible to open children of specific ForeignKey? E.g. I want this is admin panel, If I click on a subject I get Children Levels and then Children Chapters and so on...

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)
Shahzad Akram
  • 4,586
  • 6
  • 32
  • 65

1 Answers1

0

I have achieved this using-

https://github.com/theatlantic/django-nested-admin The admin would look something like-

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)
Zoie
  • 344
  • 2
  • 9