From 62d258fd9e5823e18ed89bb24985cafc9e7adaad Mon Sep 17 00:00:00 2001
From: Paul J Stevens
Date: Sat, 17 Mar 2018 11:26:56 +0100
Subject: [PATCH] fixes wagtail2 compatibility
return QuerySets instead of lists
---
src/wagtail_personalisation/models.py | 8 ++------
src/wagtail_personalisation/utils.py | 12 ++++++------
2 files changed, 8 insertions(+), 12 deletions(-)
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'))
+ )