Reputation: 632
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