From d3f4d42d82a061b98c7da6ac5895563fcf97625e Mon Sep 17 00:00:00 2001 From: Kaitlyn Crawford Date: Wed, 2 Jan 2019 16:51:56 +0200 Subject: [PATCH] Define panel for rules to handle InlinePanel changes --- src/wagtail_personalisation/models.py | 10 +++++++++- tests/unit/test_models.py | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/wagtail_personalisation/models.py b/src/wagtail_personalisation/models.py index ae3ed4e..92fa233 100644 --- a/src/wagtail_personalisation/models.py +++ b/src/wagtail_personalisation/models.py @@ -21,6 +21,14 @@ from wagtail_personalisation.utils import count_active_days from .forms import SegmentAdminForm +class RulePanel(InlinePanel): + def on_model_bound(self): + self.db_field = self.model._meta.get_field( + self.relation_name.replace('_related', 's')) + manager = getattr(self.model, self.relation_name) + self.related = manager.rel + + class SegmentQuerySet(models.QuerySet): def enabled(self): return self.filter(status=self.model.STATUS_ENABLED) @@ -121,7 +129,7 @@ class Segment(ClusterableModel): FieldPanel('randomisation_percent', classname='percent_field'), ], heading="Segment"), MultiFieldPanel([ - InlinePanel( + RulePanel( "{}_related".format(rule_model._meta.db_table), label='{}{}'.format( rule_model._meta.verbose_name, diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py index 078240b..7ee7294 100644 --- a/tests/unit/test_models.py +++ b/tests/unit/test_models.py @@ -6,6 +6,7 @@ import pytest from tests.factories.segment import SegmentFactory from wagtail_personalisation.rules import TimeRule +from wagtail_personalisation.models import Segment @pytest.mark.django_db @@ -25,3 +26,10 @@ def test_metadata_page_has_variants(segmented_page): canonical = segmented_page.personalisation_metadata.canonical_page assert canonical.personalisation_metadata.is_canonical assert canonical.personalisation_metadata.has_variants + + +@pytest.mark.django_db +def test_segment_edit_view(site, client, django_user_model): + test_segment = Segment() + new_panel = test_segment.panels[1].children[0].bind_to_model(Segment) + assert new_panel.related.name == "wagtail_personalisation_timerules"