1

I'm working with wagtail and implemented a many-to-many relationship between page models by using a central model which handles this relationship. I did the same, as what is written in this issue: Wagtail many-to-many links between different Page models and it works so far in the wagtail admin. Now I struggle with accessing the information of the related page model and displaying it on a template. So let's assume, that I use the code from the mentioned issue:

Example Code

from modelcluster.fields import ParentalKey
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel, PageChooserPanel

class PersonPageSitePageRelation(models.Model):
    person = ParentalKey('app.PersonPage', on_delete=models.CASCADE, related_name='sites')
    site = ParentalKey('app.SitePage', on_delete=models.CASCADE, related_name='people')
    # Optional: some additional fields (e.g. 'note') for this relation
    # Important: NOT setting any `panels` here, will be set individually for each 'direction'

    class Meta:
        unique_together = ('person', 'site')


class PersonPage(Page):
    # ... fields (note: `sites` does NOT need to be declared as a field)
    
    # Now we add an `InlinePanel` that will connect to the parental connection to PersonPageSitePageRelation via the related name `sites`, but the panels available will be the PersonPageSitePageRelation's field `site`
    content_panels = Page.content_panels + [
        # ... other FieldPanel etc
        InlinePanel('sites', label='Related Sites', [PageChooserPanel('site')]),
    ]


class SitePage(Page):
    # ... fields (note: `people` does NOT need to be declared as a field)

    # Now we add an `InlinePanel` that will connect to the parental connection to PersonPageSitePageRelation via the related name `people`, but the panels available will be the PersonPageSitePageRelation's field `person`
    content_panels = Page.content_panels + [
        # ... other FieldPanel etc
        InlinePanel('people', label='Related People', panels=[PageChooserPanel('person')]),
    ]

I'm able to select related person-pages on a site page by a page-chooser-panel. How can I now display all persons of one site on a site_page.html template? If I'm accessing one specific SidePage via site_page.html I tried the tag {{page.people}} but I just see PersonPageSitePageRelation.None. I'm so confused by the use of the central PersonPageSitePageRelation model and I don't find any similar case in other issues.

Thank you a lot in advance!

bripu
  • 13
  • 3

0 Answers0