Moved editors pick model to searchpicks

This commit is contained in:
Karl Hobley 2015-07-06 10:00:14 +01:00
parent 0c7f00e078
commit 049efc8281
8 changed files with 133 additions and 53 deletions

View file

@ -3,7 +3,8 @@ from django.forms.models import inlineformset_factory
from django.utils.translation import ugettext_lazy as _
from wagtail.wagtailadmin.widgets import AdminPageChooser
from wagtail.wagtailsearch import models
from wagtail.wagtailsearch.models import Query
from wagtail.contrib.wagtailsearchpicks.models import SearchPick
class SearchPickForm(forms.ModelForm):
@ -14,7 +15,7 @@ class SearchPickForm(forms.ModelForm):
self.fields['page'].widget = AdminPageChooser()
class Meta:
model = models.EditorsPick
model = SearchPick
fields = ('query', 'page', 'description')
widgets = {
@ -22,7 +23,7 @@ class SearchPickForm(forms.ModelForm):
}
SearchPicksFormSetBase = inlineformset_factory(models.Query, models.EditorsPick, form=SearchPickForm, can_order=True, can_delete=True, extra=0)
SearchPicksFormSetBase = inlineformset_factory(Query, SearchPick, form=SearchPickForm, can_order=True, can_delete=True, extra=0)
class SearchPicksFormSet(SearchPicksFormSetBase):

View file

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0015_add_more_verbose_names'),
('wagtailsearch', '0003_remove_editors_pick'),
]
operations = [
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.CreateModel(
name='EditorsPick',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('sort_order', models.IntegerField(editable=False, null=True, blank=True)),
('description', models.TextField(verbose_name='Description', blank=True)),
('page', models.ForeignKey(verbose_name='Page', to='wagtailcore.Page')),
('query', models.ForeignKey(to='wagtailsearch.Query', related_name='editors_picks')),
],
options={
'db_table': 'wagtailsearch_editorspick',
'verbose_name': "Editor's Pick",
'ordering': ('sort_order',),
},
),
],
database_operations=[]
),
migrations.AlterModelTable(
name='editorspick',
table=None,
),
migrations.RenameModel(
old_name='EditorsPick',
new_name='SearchPick'
)
]

View file

@ -0,0 +1,18 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from wagtail.wagtailsearch.models import Query
class SearchPick(models.Model):
query = models.ForeignKey(Query, db_index=True, related_name='editors_picks')
page = models.ForeignKey('wagtailcore.Page', verbose_name=_('Page'))
sort_order = models.IntegerField(null=True, blank=True, editable=False)
description = models.TextField(verbose_name=_('Description'), blank=True)
def __repr__(self):
return 'SearchPick(query="' + self.query.query_string + '", page="' + self.page.title + '")'
class Meta:
ordering = ('sort_order', )
verbose_name = _("Editor's Pick")

View file

@ -2,49 +2,50 @@ from django.test import TestCase
from django.core.urlresolvers import reverse
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailsearch import models
from wagtail.wagtailsearch.models import Query
from wagtail.contrib.wagtailsearchpicks.models import SearchPick
class TestSearchPicks(TestCase):
def test_search_pick_create(self):
# Create a search pick to the root page
models.EditorsPick.objects.create(
query=models.Query.get("root page"),
SearchPick.objects.create(
query=Query.get("root page"),
page_id=1,
sort_order=0,
description="First search pick",
)
# Check
self.assertEqual(models.Query.get("root page").editors_picks.count(), 1)
self.assertEqual(models.Query.get("root page").editors_picks.first().page_id, 1)
self.assertEqual(Query.get("root page").editors_picks.count(), 1)
self.assertEqual(Query.get("root page").editors_picks.first().page_id, 1)
def test_search_pick_ordering(self):
# Add 3 search picks in a different order to their sort_order values
# They should be ordered by their sort order values and not their insertion order
models.EditorsPick.objects.create(
query=models.Query.get("root page"),
SearchPick.objects.create(
query=Query.get("root page"),
page_id=1,
sort_order=0,
description="First search pick",
)
models.EditorsPick.objects.create(
query=models.Query.get("root page"),
SearchPick.objects.create(
query=Query.get("root page"),
page_id=1,
sort_order=2,
description="Last search pick",
)
models.EditorsPick.objects.create(
query=models.Query.get("root page"),
SearchPick.objects.create(
query=Query.get("root page"),
page_id=1,
sort_order=1,
description="Middle search pick",
)
# Check
self.assertEqual(models.Query.get("root page").editors_picks.count(), 3)
self.assertEqual(models.Query.get("root page").editors_picks.first().description, "First search pick")
self.assertEqual(models.Query.get("root page").editors_picks.last().description, "Last search pick")
self.assertEqual(Query.get("root page").editors_picks.count(), 3)
self.assertEqual(Query.get("root page").editors_picks.first().description, "First search pick")
self.assertEqual(Query.get("root page").editors_picks.last().description, "Last search pick")
class TestSearchPicksIndexView(TestCase, WagtailTestUtils):
@ -63,8 +64,8 @@ class TestSearchPicksIndexView(TestCase, WagtailTestUtils):
def make_search_picks(self):
for i in range(50):
models.EditorsPick.objects.create(
query=models.Query.get("query " + str(i)),
SearchPick.objects.create(
query=Query.get("query " + str(i)),
page_id=1,
sort_order=0,
description="First search pick",
@ -134,7 +135,7 @@ class TestSearchPicksAddView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
# Check that the search pick was created
self.assertTrue(models.Query.get('test').editors_picks.filter(page_id=1).exists())
self.assertTrue(Query.get('test').editors_picks.filter(page_id=1).exists())
def test_post_without_recommendations(self):
# Submit
@ -156,7 +157,7 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
self.login()
# Create an search pick to edit
self.query = models.Query.get("Hello")
self.query = Query.get("Hello")
self.search_pick = self.query.editors_picks.create(page_id=1, description="Root page")
self.search_pick_2 = self.query.editors_picks.create(page_id=2, description="Homepage")
@ -189,12 +190,12 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
# Check that the search pick description was edited
self.assertEqual(models.EditorsPick.objects.get(id=self.search_pick.id).description, "Description has changed")
self.assertEqual(SearchPick.objects.get(id=self.search_pick.id).description, "Description has changed")
def test_post_reorder(self):
# Check order before reordering
self.assertEqual(models.Query.get("Hello").editors_picks.all()[0], self.search_pick)
self.assertEqual(models.Query.get("Hello").editors_picks.all()[1], self.search_pick_2)
self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick)
self.assertEqual(Query.get("Hello").editors_picks.all()[1], self.search_pick_2)
# Submit
post_data = {
@ -219,12 +220,12 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
# Check that the ordering has been saved correctly
self.assertEqual(models.EditorsPick.objects.get(id=self.search_pick.id).sort_order, 1)
self.assertEqual(models.EditorsPick.objects.get(id=self.search_pick_2.id).sort_order, 0)
self.assertEqual(SearchPick.objects.get(id=self.search_pick.id).sort_order, 1)
self.assertEqual(SearchPick.objects.get(id=self.search_pick_2.id).sort_order, 0)
# Check that the recommendations were reordered
self.assertEqual(models.Query.get("Hello").editors_picks.all()[0], self.search_pick_2)
self.assertEqual(models.Query.get("Hello").editors_picks.all()[1], self.search_pick)
self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick_2)
self.assertEqual(Query.get("Hello").editors_picks.all()[1], self.search_pick)
def test_post_delete_recommendation(self):
# Submit
@ -250,10 +251,10 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
# Check that the recommendation was deleted
self.assertFalse(models.EditorsPick.objects.filter(id=self.search_pick_2.id).exists())
self.assertFalse(SearchPick.objects.filter(id=self.search_pick_2.id).exists())
# The other recommendation should still exist
self.assertTrue(models.EditorsPick.objects.filter(id=self.search_pick.id).exists())
self.assertTrue(SearchPick.objects.filter(id=self.search_pick.id).exists())
def test_post_without_recommendations(self):
# Submit
@ -285,7 +286,7 @@ class TestSearchPicksDeleteView(TestCase, WagtailTestUtils):
self.login()
# Create an search pick to delete
self.query = models.Query.get("Hello")
self.query = Query.get("Hello")
self.search_pick = self.query.editors_picks.create(page_id=1, description="Root page")
self.search_pick_2 = self.query.editors_picks.create(page_id=2, description="Homepage")
@ -305,7 +306,7 @@ class TestSearchPicksDeleteView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
# Check that both recommendations were deleted
self.assertFalse(models.EditorsPick.objects.filter(id=self.search_pick_2.id).exists())
self.assertFalse(SearchPick.objects.filter(id=self.search_pick_2.id).exists())
# The other recommendation should still exist
self.assertFalse(models.EditorsPick.objects.filter(id=self.search_pick.id).exists())
self.assertFalse(SearchPick.objects.filter(id=self.search_pick.id).exists())

View file

@ -5,7 +5,8 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
from wagtail.wagtailsearch import models, forms as search_forms
from wagtail.wagtailsearch import forms as search_forms
from wagtail.wagtailsearch.models import Query
from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin import messages
@ -18,7 +19,7 @@ def index(request):
page = request.GET.get('p', 1)
query_string = request.GET.get('q', "")
queries = models.Query.objects.filter(editors_picks__isnull=False).distinct()
queries = Query.objects.filter(editors_picks__isnull=False).distinct()
# Search
if query_string:
@ -75,7 +76,7 @@ def add(request):
# Get query
query_form = search_forms.QueryForm(request.POST)
if query_form.is_valid():
query = models.Query.get(query_form['query_string'].value())
query = Query.get(query_form['query_string'].value())
# Save search picks
searchpicks_formset = forms.SearchPicksFormSet(request.POST, instance=query)
@ -102,7 +103,7 @@ def add(request):
def edit(request, query_id):
query = get_object_or_404(models.Query, id=query_id)
query = get_object_or_404(Query, id=query_id)
if request.POST:
# Get query
@ -111,7 +112,7 @@ def edit(request, query_id):
searchpicks_formset = forms.SearchPicksFormSet(request.POST, instance=query)
if query_form.is_valid():
new_query = models.Query.get(query_form['query_string'].value())
new_query = Query.get(query_form['query_string'].value())
# Save search picks
if save_searchpicks(query, new_query, searchpicks_formset):
@ -137,7 +138,7 @@ def edit(request, query_id):
def delete(request, query_id):
query = get_object_or_404(models.Query, id=query_id)
query = get_object_or_404(Query, id=query_id)
if request.POST:
query.editors_picks.all().delete()

View file

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('wagtailsearch', '0002_add_verbose_names'),
]
operations = [
migrations.SeparateDatabaseAndState(
state_operations=[
migrations.RemoveField(
model_name='editorspick',
name='page',
),
migrations.RemoveField(
model_name='editorspick',
name='query',
),
migrations.DeleteModel(
name='EditorsPick',
),
],
database_operations=[],
)
]

View file

@ -71,17 +71,3 @@ class QueryDailyHits(models.Model):
('query', 'date'),
)
verbose_name = _('Query Daily Hits')
class EditorsPick(models.Model):
query = models.ForeignKey(Query, db_index=True, related_name='editors_picks')
page = models.ForeignKey('wagtailcore.Page', verbose_name=_('Page'))
sort_order = models.IntegerField(null=True, blank=True, editable=False)
description = models.TextField(verbose_name=_('Description'), blank=True)
def __repr__(self):
return 'EditorsPick(query="' + self.query.query_string + '", page="' + self.page.title + '")'
class Meta:
ordering = ('sort_order', )
verbose_name = _("Editor's Pick")