mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-04-12 19:10:59 +00:00
Moved editors pick model to searchpicks
This commit is contained in:
parent
0c7f00e078
commit
049efc8281
8 changed files with 133 additions and 53 deletions
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
)
|
||||
]
|
||||
|
|
@ -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")
|
||||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
30
wagtail/wagtailsearch/migrations/0003_remove_editors_pick.py
Normal file
30
wagtail/wagtailsearch/migrations/0003_remove_editors_pick.py
Normal 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=[],
|
||||
)
|
||||
]
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Reference in a new issue