diff --git a/src/personalisation/admin.py b/src/personalisation/admin.py index 70f61d7..ad3c2b7 100644 --- a/src/personalisation/admin.py +++ b/src/personalisation/admin.py @@ -1,36 +1,40 @@ from django.contrib import admin from personalisation import models +from polymorphic.admin import PolymorphicInlineSupportMixin, StackedPolymorphicInline + +class RulesInline(StackedPolymorphicInline): + + class TimeRuleAdminInline(StackedPolymorphicInline.Child): + """Inline the Time Rule into the administration interface for segments""" + model = models.TimeRule + extra = 0 -class TimeRuleAdminInline(admin.TabularInline): - """Inline the Time Rule into the administration interface for segments""" - model = models.TimeRule - extra = 0 + class ReferralRuleAdminInline(StackedPolymorphicInline.Child): + """ + Inline the Referral Rule into the administration interface for segments + """ + model = models.ReferralRule + extra = 0 -class ReferralRuleAdminInline(admin.TabularInline): - """ - Inline the Referral Rule into the administration interface for segments - """ - model = models.ReferralRule - extra = 0 + class VisitCountRuleAdminInline(StackedPolymorphicInline.Child): + """ + Inline the Visit Count Rule into the administration interface for segments + """ + model = models.VisitCountRule + extra = 0 -class VisitCountRuleAdminInline(admin.TabularInline): - """ - Inline the Visit Count Rule into the administration interface for segments - """ - model = models.VisitCountRule - extra = 0 - - -class SegmentAdmin(admin.ModelAdmin): - """Add the inlines to the Segment admin interface""" - inlines = ( - TimeRuleAdminInline, ReferralRuleAdminInline, - VisitCountRuleAdminInline + model = models.AbstractBaseRule + child_inlines = ( + TimeRuleAdminInline, + ReferralRuleAdminInline, + VisitCountRuleAdminInline, ) -admin.site.register(models.Segment, SegmentAdmin) +@admin.register(models.Segment) +class SegmentAdmin(PolymorphicInlineSupportMixin, admin.ModelAdmin): + inlines = (RulesInline,) diff --git a/src/personalisation/models.py b/src/personalisation/models.py index fb089a5..7ae6d53 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -14,10 +14,9 @@ from modelcluster.fields import ParentalKey from modelcluster.models import ClusterableModel from polymorphic.models import PolymorphicModel from wagtail.utils.decorators import cached_classmethod -from wagtail.wagtailadmin.edit_handlers import (FieldPanel, FieldRowPanel, - InlinePanel, MultiFieldPanel, - ObjectList, PageChooserPanel, - TabbedInterface) +from wagtail.wagtailadmin.edit_handlers import ( + FieldPanel, FieldRowPanel, InlinePanel, MultiFieldPanel, ObjectList, + PageChooserPanel, TabbedInterface) from wagtail.wagtailadmin.forms import WagtailAdminPageForm from wagtail.wagtailcore.models import Page @@ -26,7 +25,7 @@ from wagtail.wagtailcore.models import Page class AbstractBaseRule(PolymorphicModel): """Base for creating rules to segment users with""" segment = ParentalKey( - 'Segment', + 'personalisation.Segment', # TODO: Make the related names accesible to wagtail admin # for inlining them. related_name="%(app_label)s_%(class)s_related",