From 3e254fba04324a3ecef217e7c24b7cfeacdccc48 Mon Sep 17 00:00:00 2001 From: Boris Besemer Date: Thu, 10 Nov 2016 11:29:33 +0100 Subject: [PATCH 1/2] adds custom create model form, wip --- src/personalisation/forms.py | 23 +++++++++++++++++++++++ src/personalisation/middleware.py | 4 ++++ src/personalisation/models.py | 2 +- src/personalisation/views.py | 6 ++++++ tests/__init__.py | 0 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/personalisation/forms.py delete mode 100644 tests/__init__.py diff --git a/src/personalisation/forms.py b/src/personalisation/forms.py new file mode 100644 index 0000000..6f9951c --- /dev/null +++ b/src/personalisation/forms.py @@ -0,0 +1,23 @@ +from __future__ import absolute_import, unicode_literals + +from django import forms +from django.conf import settings +from django.utils.translation import ugettext as _ +from wagtail.wagtailcore.models import Page + +from personalisation.models import Segment + + +class SegmentForm(forms.ModelForm): + """ + Custom Segment form for the create view + """ + class Meta: + model = Segment + fields = ( + 'name', + 'status', + ) + + def __init__(self, *args, **kwargs): + super(SegmentForm, self).__init__(*args, **kwargs) diff --git a/src/personalisation/middleware.py b/src/personalisation/middleware.py index 7c088a9..3f1ecd2 100644 --- a/src/personalisation/middleware.py +++ b/src/personalisation/middleware.py @@ -1,4 +1,7 @@ import time +import logging + +logger = logging.getLogger() from personalisation.models import AbstractBaseRule, Segment @@ -27,6 +30,7 @@ class SegmentMiddleware(object): self.add_segment_to_user(segment, request) response = self.get_response(request) + logger.info("User has been added to the following segments: {}".format(request.session['segments'])) return response def test_rules(self, rules, request): diff --git a/src/personalisation/models.py b/src/personalisation/models.py index 8f46458..72b0da0 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -107,7 +107,7 @@ class TimeRule(AbstractBaseRule): @python_2_unicode_compatible class ReferralRule(AbstractBaseRule): """Referral rule to segment users based on a regex test""" - regex_string = models.TextField() + regex_string = models.TextField(_("Regex string to match the referer with")) panels = [ FieldPanel('regex_string'), diff --git a/src/personalisation/views.py b/src/personalisation/views.py index 62547a0..5bce92a 100644 --- a/src/personalisation/views.py +++ b/src/personalisation/views.py @@ -4,7 +4,10 @@ from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.urls import reverse +from wagtail.wagtailadmin.views import generic + from personalisation.models import Segment +from personalisation.forms import SegmentForm def overview(request): @@ -26,3 +29,6 @@ def disable(request, segment_id): segment.save() return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + + + diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 From 76757ea28e4d9203ece369d733203d40f5807718 Mon Sep 17 00:00:00 2001 From: Boris Besemer Date: Thu, 10 Nov 2016 12:44:32 +0100 Subject: [PATCH 2/2] keep on kicking against that model admin --- src/personalisation/admin_urls.py | 1 + src/personalisation/forms.py | 2 -- src/personalisation/models.py | 5 +++-- .../modeladmin/personalisation/segment/create.html | 2 +- src/personalisation/views.py | 9 +++++++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/personalisation/admin_urls.py b/src/personalisation/admin_urls.py index 49ac124..c96306d 100644 --- a/src/personalisation/admin_urls.py +++ b/src/personalisation/admin_urls.py @@ -7,6 +7,7 @@ from personalisation import views app_name = 'segment' urlpatterns = [ url(r'^segment/(\d+)/$', views.overview, name='overview'), + # url(r'^segment/create/$', views.CreateSegmentView.as_view(), name='create'), url(r'^segment/(?P[0-9]+)/enable/$', views.enable, name='enable'), url(r'^segment/(?P[0-9]+)/disable/$', views.disable, name='disable'), ] diff --git a/src/personalisation/forms.py b/src/personalisation/forms.py index 6f9951c..ad7ac5f 100644 --- a/src/personalisation/forms.py +++ b/src/personalisation/forms.py @@ -19,5 +19,3 @@ class SegmentForm(forms.ModelForm): 'status', ) - def __init__(self, *args, **kwargs): - super(SegmentForm, self).__init__(*args, **kwargs) diff --git a/src/personalisation/models.py b/src/personalisation/models.py index 72b0da0..1ae681a 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -10,7 +10,8 @@ from django.template.defaultfilters import slugify from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from modelcluster.models import ClusterableModel -from wagtail.wagtailadmin.edit_handlers import FieldPanel +from modelcluster.fields import ParentalKey +from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel from polymorphic.models import PolymorphicModel @@ -64,7 +65,7 @@ pre_save.connect(check_status_change, sender=Segment) @python_2_unicode_compatible class AbstractBaseRule(PolymorphicModel): """Base for creating rules to segment users with""" - segment = models.ForeignKey(to=Segment, related_name="rules") + segment = ParentalKey('Segment', related_name="rules") def test_user(self, request): """Test if the user matches this rule""" diff --git a/src/personalisation/templates/modeladmin/personalisation/segment/create.html b/src/personalisation/templates/modeladmin/personalisation/segment/create.html index 07830e0..c41020b 100644 --- a/src/personalisation/templates/modeladmin/personalisation/segment/create.html +++ b/src/personalisation/templates/modeladmin/personalisation/segment/create.html @@ -74,4 +74,4 @@ {% endblock %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/personalisation/views.py b/src/personalisation/views.py index 5bce92a..31759df 100644 --- a/src/personalisation/views.py +++ b/src/personalisation/views.py @@ -3,8 +3,9 @@ from __future__ import absolute_import, unicode_literals from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.urls import reverse +from django.utils.translation import ugettext_lazy as _ -from wagtail.wagtailadmin.views import generic +from wagtail.contrib.modeladmin.views import CreateView from personalisation.models import Segment from personalisation.forms import SegmentForm @@ -31,4 +32,8 @@ def disable(request, segment_id): return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - +class CreateSegmentView(CreateView): + page_title = _("Add segment") + form_class = SegmentForm + template_name = 'modeladmin/personalisation/segment/create.html' + header_icon = 'folder-open-1'