Tohid
Tohid

Reputation: 632

How to restrict available InlinePanel instances that can be choosen in wagtail admin

Let's say we Course and Lesson Wagtail Page models, where Lesson page instances are sub-pages of Course page instance. E.g. "Web Development Course > HTML Lesson". Implemented as:

class Course(Page):
    description = models.TextField(null=True, blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('description'),
    ]

class Lesson(Page):
    description = models.TextField(null=True, blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('description'),
    ]
    parent_page_types = ['app.Course']

Now we add an orderable many2many relationship to Course using InlinePanel(), so we can set each course's lessons and order them in Wagtail Admin. implementation:

class Course(Page):
    description = models.TextField(null=True, blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('description'),
        InlinePanel('course_lessons', label='Lessons'),
    ]

class CourseLessons(Orderable):
    page = ParentalKey('Course', on_delete=models.CASCADE, related_name='course_lessons')
    lesson = models.ForeignKey('Lesson', on_delete=models.CASCADE)
    panels = [
        FieldPanel('lesson'),
    ]

class Lesson(Page):
    description = models.TextField(null=True, blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('description'),
    ]
    parent_page_types = ['course.Course']

Question: How can we limit the inline page choices to specific parent page's sub-pages? E.g. When selecting lessons for a course, only that course's lessons(sub-pages) are available. I thing this can be achieved either by limiting Page

Upvotes: 0

Views: 34

Answers (0)

Related Questions