diff --git a/src/wagtail_personalisation/models.py b/src/wagtail_personalisation/models.py index e6e87d8..64dfe61 100644 --- a/src/wagtail_personalisation/models.py +++ b/src/wagtail_personalisation/models.py @@ -80,15 +80,11 @@ class Segment(ClusterableModel): def get_used_pages(self): """Return the pages that have variants using this segment.""" - pages = list(PersonalisablePageMetadata.objects.filter(segment=self)) - - return pages + return PersonalisablePageMetadata.objects.filter(segment=self) def get_created_variants(self): """Return the variants using this segment.""" - pages = Page.objects.filter(_personalisable_page_metadata__segment=self) - - return pages + return Page.objects.filter(_personalisable_page_metadata__segment=self) def get_rules(self): """Retrieve all rules in the segment.""" diff --git a/src/wagtail_personalisation/utils.py b/src/wagtail_personalisation/utils.py index b261791..6646027 100644 --- a/src/wagtail_personalisation/utils.py +++ b/src/wagtail_personalisation/utils.py @@ -1,5 +1,6 @@ import time +from django.db.models import F from django.template.base import FilterExpression, kwarg_re from django.utils import timezone @@ -103,9 +104,8 @@ def exclude_variants(pages): :return: List of pages that aren't variants :rtype: list """ - return [page for page in pages - if (hasattr(page, 'personalisation_metadata') is False) - or (hasattr(page, 'personalisation_metadata') - and page.personalisation_metadata is None) - or (hasattr(page, 'personalisation_metadata') - and page.personalisation_metadata.is_canonical)] + return ( + pages.filter( + personalisable_canonical_metadata__canonical_page_id=F( + 'personalisable_canonical_metadata__variant__id')) + )