mirror of
https://github.com/wagtail/wagtail.git
synced 2024-12-01 11:41:20 +01:00
SearchPick => SearchPromotion
This commit is contained in:
parent
669c7ac34c
commit
aea1ec742a
@ -4,18 +4,18 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
|
|
||||||
from wagtail.wagtailadmin.widgets import AdminPageChooser
|
from wagtail.wagtailadmin.widgets import AdminPageChooser
|
||||||
from wagtail.wagtailsearch.models import Query
|
from wagtail.wagtailsearch.models import Query
|
||||||
from wagtail.contrib.wagtailsearchpicks.models import SearchPick
|
from wagtail.contrib.wagtailsearchpicks.models import SearchPromotion
|
||||||
|
|
||||||
|
|
||||||
class SearchPickForm(forms.ModelForm):
|
class SearchPromotionForm(forms.ModelForm):
|
||||||
sort_order = forms.IntegerField(required=False)
|
sort_order = forms.IntegerField(required=False)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(SearchPickForm, self).__init__(*args, **kwargs)
|
super(SearchPromotionForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['page'].widget = AdminPageChooser()
|
self.fields['page'].widget = AdminPageChooser()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SearchPick
|
model = SearchPromotion
|
||||||
fields = ('query', 'page', 'description')
|
fields = ('query', 'page', 'description')
|
||||||
|
|
||||||
widgets = {
|
widgets = {
|
||||||
@ -23,15 +23,15 @@ class SearchPickForm(forms.ModelForm):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SearchPicksFormSetBase = inlineformset_factory(Query, SearchPick, form=SearchPickForm, can_order=True, can_delete=True, extra=0)
|
SearchPromotionsFormSetBase = inlineformset_factory(Query, SearchPromotion, form=SearchPromotionForm, can_order=True, can_delete=True, extra=0)
|
||||||
|
|
||||||
|
|
||||||
class SearchPicksFormSet(SearchPicksFormSetBase):
|
class SearchPromotionsFormSet(SearchPromotionsFormSetBase):
|
||||||
minimum_forms = 1
|
minimum_forms = 1
|
||||||
minimum_forms_message = _("Please specify at least one recommendation for this search term.")
|
minimum_forms_message = _("Please specify at least one recommendation for this search term.")
|
||||||
|
|
||||||
def add_fields(self, form, *args, **kwargs):
|
def add_fields(self, form, *args, **kwargs):
|
||||||
super(SearchPicksFormSet, self).add_fields(form, *args, **kwargs)
|
super(SearchPromotionsFormSet, self).add_fields(form, *args, **kwargs)
|
||||||
|
|
||||||
# Hide delete and order fields
|
# Hide delete and order fields
|
||||||
form.fields['DELETE'].widget = forms.HiddenInput()
|
form.fields['DELETE'].widget = forms.HiddenInput()
|
||||||
|
@ -38,6 +38,10 @@ class Migration(migrations.Migration):
|
|||||||
),
|
),
|
||||||
migrations.RenameModel(
|
migrations.RenameModel(
|
||||||
old_name='EditorsPick',
|
old_name='EditorsPick',
|
||||||
new_name='SearchPick'
|
new_name='SearchPromotion'
|
||||||
)
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='searchpromotion',
|
||||||
|
options={'ordering': ('sort_order',), 'verbose_name': 'Search promotion'},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
@ -4,15 +4,15 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from wagtail.wagtailsearch.models import Query
|
from wagtail.wagtailsearch.models import Query
|
||||||
|
|
||||||
|
|
||||||
class SearchPick(models.Model):
|
class SearchPromotion(models.Model):
|
||||||
query = models.ForeignKey(Query, db_index=True, related_name='editors_picks')
|
query = models.ForeignKey(Query, db_index=True, related_name='editors_picks')
|
||||||
page = models.ForeignKey('wagtailcore.Page', verbose_name=_('Page'))
|
page = models.ForeignKey('wagtailcore.Page', verbose_name=_('Page'))
|
||||||
sort_order = models.IntegerField(null=True, blank=True, editable=False)
|
sort_order = models.IntegerField(null=True, blank=True, editable=False)
|
||||||
description = models.TextField(verbose_name=_('Description'), blank=True)
|
description = models.TextField(verbose_name=_('Description'), blank=True)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'SearchPick(query="' + self.query.query_string + '", page="' + self.page.title + '")'
|
return 'SearchPromotion(query="' + self.query.query_string + '", page="' + self.page.title + '")'
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('sort_order', )
|
ordering = ('sort_order', )
|
||||||
verbose_name = _("Editor's Pick")
|
verbose_name = _("Search promotion")
|
||||||
|
@ -3,14 +3,14 @@ from django.core.urlresolvers import reverse
|
|||||||
|
|
||||||
from wagtail.tests.utils import WagtailTestUtils
|
from wagtail.tests.utils import WagtailTestUtils
|
||||||
from wagtail.wagtailsearch.models import Query
|
from wagtail.wagtailsearch.models import Query
|
||||||
from wagtail.contrib.wagtailsearchpicks.models import SearchPick
|
from wagtail.contrib.wagtailsearchpicks.models import SearchPromotion
|
||||||
from wagtail.contrib.wagtailsearchpicks.templatetags.wagtailsearchpicks_tags import get_search_picks
|
from wagtail.contrib.wagtailsearchpicks.templatetags.wagtailsearchpicks_tags import get_search_picks
|
||||||
|
|
||||||
|
|
||||||
class TestSearchPicks(TestCase):
|
class TestSearchPromotions(TestCase):
|
||||||
def test_search_pick_create(self):
|
def test_search_pick_create(self):
|
||||||
# Create a search pick to the root page
|
# Create a search pick to the root page
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("root page"),
|
query=Query.get("root page"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=0,
|
sort_order=0,
|
||||||
@ -24,19 +24,19 @@ class TestSearchPicks(TestCase):
|
|||||||
def test_search_pick_ordering(self):
|
def test_search_pick_ordering(self):
|
||||||
# Add 3 search picks in a different order to their sort_order values
|
# 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
|
# They should be ordered by their sort order values and not their insertion order
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("root page"),
|
query=Query.get("root page"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=0,
|
sort_order=0,
|
||||||
description="First search pick",
|
description="First search pick",
|
||||||
)
|
)
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("root page"),
|
query=Query.get("root page"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=2,
|
sort_order=2,
|
||||||
description="Last search pick",
|
description="Last search pick",
|
||||||
)
|
)
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("root page"),
|
query=Query.get("root page"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=1,
|
sort_order=1,
|
||||||
@ -49,10 +49,10 @@ class TestSearchPicks(TestCase):
|
|||||||
self.assertEqual(Query.get("root page").editors_picks.last().description, "Last search pick")
|
self.assertEqual(Query.get("root page").editors_picks.last().description, "Last search pick")
|
||||||
|
|
||||||
|
|
||||||
class TestGetSearchPicksTemplateTag(TestCase):
|
class TestGetSearchPromotionsTemplateTag(TestCase):
|
||||||
def test_get_search_picks_template_tag(self):
|
def test_get_search_picks_template_tag(self):
|
||||||
# Create a search pick to the root page
|
# Create a search pick to the root page
|
||||||
pick = SearchPick.objects.create(
|
pick = SearchPromotion.objects.create(
|
||||||
query=Query.get("root page"),
|
query=Query.get("root page"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=0,
|
sort_order=0,
|
||||||
@ -60,7 +60,7 @@ class TestGetSearchPicksTemplateTag(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Create another search pick against a different query
|
# Create another search pick against a different query
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("root page again"),
|
query=Query.get("root page again"),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=0,
|
sort_order=0,
|
||||||
@ -72,7 +72,7 @@ class TestGetSearchPicksTemplateTag(TestCase):
|
|||||||
self.assertEqual(search_picks, [pick])
|
self.assertEqual(search_picks, [pick])
|
||||||
|
|
||||||
|
|
||||||
class TestSearchPicksIndexView(TestCase, WagtailTestUtils):
|
class TestSearchPromotionsIndexView(TestCase, WagtailTestUtils):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ class TestSearchPicksIndexView(TestCase, WagtailTestUtils):
|
|||||||
|
|
||||||
def make_search_picks(self):
|
def make_search_picks(self):
|
||||||
for i in range(50):
|
for i in range(50):
|
||||||
SearchPick.objects.create(
|
SearchPromotion.objects.create(
|
||||||
query=Query.get("query " + str(i)),
|
query=Query.get("query " + str(i)),
|
||||||
page_id=1,
|
page_id=1,
|
||||||
sort_order=0,
|
sort_order=0,
|
||||||
@ -132,7 +132,7 @@ class TestSearchPicksIndexView(TestCase, WagtailTestUtils):
|
|||||||
self.assertEqual(response.context['queries'].number, response.context['queries'].paginator.num_pages)
|
self.assertEqual(response.context['queries'].number, response.context['queries'].paginator.num_pages)
|
||||||
|
|
||||||
|
|
||||||
class TestSearchPicksAddView(TestCase, WagtailTestUtils):
|
class TestSearchPromotionsAddView(TestCase, WagtailTestUtils):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ class TestSearchPicksAddView(TestCase, WagtailTestUtils):
|
|||||||
self.assertFormsetError(response, 'searchpicks_formset', None, None, "Please specify at least one recommendation for this search term.")
|
self.assertFormsetError(response, 'searchpicks_formset', None, None, "Please specify at least one recommendation for this search term.")
|
||||||
|
|
||||||
|
|
||||||
class TestSearchPicksEditView(TestCase, WagtailTestUtils):
|
class TestSearchPromotionsEditView(TestCase, WagtailTestUtils):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
|
|||||||
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
||||||
|
|
||||||
# Check that the search pick description was edited
|
# Check that the search pick description was edited
|
||||||
self.assertEqual(SearchPick.objects.get(id=self.search_pick.id).description, "Description has changed")
|
self.assertEqual(SearchPromotion.objects.get(id=self.search_pick.id).description, "Description has changed")
|
||||||
|
|
||||||
def test_post_reorder(self):
|
def test_post_reorder(self):
|
||||||
# Check order before reordering
|
# Check order before reordering
|
||||||
@ -244,8 +244,8 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
|
|||||||
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
||||||
|
|
||||||
# Check that the ordering has been saved correctly
|
# Check that the ordering has been saved correctly
|
||||||
self.assertEqual(SearchPick.objects.get(id=self.search_pick.id).sort_order, 1)
|
self.assertEqual(SearchPromotion.objects.get(id=self.search_pick.id).sort_order, 1)
|
||||||
self.assertEqual(SearchPick.objects.get(id=self.search_pick_2.id).sort_order, 0)
|
self.assertEqual(SearchPromotion.objects.get(id=self.search_pick_2.id).sort_order, 0)
|
||||||
|
|
||||||
# Check that the recommendations were reordered
|
# Check that the recommendations were reordered
|
||||||
self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick_2)
|
self.assertEqual(Query.get("Hello").editors_picks.all()[0], self.search_pick_2)
|
||||||
@ -275,10 +275,10 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
|
|||||||
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
||||||
|
|
||||||
# Check that the recommendation was deleted
|
# Check that the recommendation was deleted
|
||||||
self.assertFalse(SearchPick.objects.filter(id=self.search_pick_2.id).exists())
|
self.assertFalse(SearchPromotion.objects.filter(id=self.search_pick_2.id).exists())
|
||||||
|
|
||||||
# The other recommendation should still exist
|
# The other recommendation should still exist
|
||||||
self.assertTrue(SearchPick.objects.filter(id=self.search_pick.id).exists())
|
self.assertTrue(SearchPromotion.objects.filter(id=self.search_pick.id).exists())
|
||||||
|
|
||||||
def test_post_without_recommendations(self):
|
def test_post_without_recommendations(self):
|
||||||
# Submit
|
# Submit
|
||||||
@ -305,7 +305,7 @@ class TestSearchPicksEditView(TestCase, WagtailTestUtils):
|
|||||||
self.assertFormsetError(response, 'searchpicks_formset', None, None, "Please specify at least one recommendation for this search term.")
|
self.assertFormsetError(response, 'searchpicks_formset', None, None, "Please specify at least one recommendation for this search term.")
|
||||||
|
|
||||||
|
|
||||||
class TestSearchPicksDeleteView(TestCase, WagtailTestUtils):
|
class TestSearchPromotionsDeleteView(TestCase, WagtailTestUtils):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ class TestSearchPicksDeleteView(TestCase, WagtailTestUtils):
|
|||||||
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
self.assertRedirects(response, reverse('wagtailsearchpicks:index'))
|
||||||
|
|
||||||
# Check that both recommendations were deleted
|
# Check that both recommendations were deleted
|
||||||
self.assertFalse(SearchPick.objects.filter(id=self.search_pick_2.id).exists())
|
self.assertFalse(SearchPromotion.objects.filter(id=self.search_pick_2.id).exists())
|
||||||
|
|
||||||
# The other recommendation should still exist
|
# The other recommendation should still exist
|
||||||
self.assertFalse(SearchPick.objects.filter(id=self.search_pick.id).exists())
|
self.assertFalse(SearchPromotion.objects.filter(id=self.search_pick.id).exists())
|
||||||
|
@ -79,7 +79,7 @@ def add(request):
|
|||||||
query = Query.get(query_form['query_string'].value())
|
query = Query.get(query_form['query_string'].value())
|
||||||
|
|
||||||
# Save search picks
|
# Save search picks
|
||||||
searchpicks_formset = forms.SearchPicksFormSet(request.POST, instance=query)
|
searchpicks_formset = forms.SearchPromotionsFormSet(request.POST, instance=query)
|
||||||
if save_searchpicks(query, query, searchpicks_formset):
|
if save_searchpicks(query, query, searchpicks_formset):
|
||||||
messages.success(request, _("Editor's picks for '{0}' created.").format(query), buttons=[
|
messages.success(request, _("Editor's picks for '{0}' created.").format(query), buttons=[
|
||||||
messages.button(reverse('wagtailsearchpicks:edit', args=(query.id,)), _('Edit'))
|
messages.button(reverse('wagtailsearchpicks:edit', args=(query.id,)), _('Edit'))
|
||||||
@ -91,10 +91,10 @@ def add(request):
|
|||||||
else:
|
else:
|
||||||
messages.error(request, _("Recommendations have not been created due to errors")) # specific errors will be displayed within form fields
|
messages.error(request, _("Recommendations have not been created due to errors")) # specific errors will be displayed within form fields
|
||||||
else:
|
else:
|
||||||
searchpicks_formset = forms.SearchPicksFormSet()
|
searchpicks_formset = forms.SearchPromotionsFormSet()
|
||||||
else:
|
else:
|
||||||
query_form = search_forms.QueryForm()
|
query_form = search_forms.QueryForm()
|
||||||
searchpicks_formset = forms.SearchPicksFormSet()
|
searchpicks_formset = forms.SearchPromotionsFormSet()
|
||||||
|
|
||||||
return render(request, 'wagtailsearchpicks/add.html', {
|
return render(request, 'wagtailsearchpicks/add.html', {
|
||||||
'query_form': query_form,
|
'query_form': query_form,
|
||||||
@ -109,7 +109,7 @@ def edit(request, query_id):
|
|||||||
# Get query
|
# Get query
|
||||||
query_form = search_forms.QueryForm(request.POST)
|
query_form = search_forms.QueryForm(request.POST)
|
||||||
# and the recommendations
|
# and the recommendations
|
||||||
searchpicks_formset = forms.SearchPicksFormSet(request.POST, instance=query)
|
searchpicks_formset = forms.SearchPromotionsFormSet(request.POST, instance=query)
|
||||||
|
|
||||||
if query_form.is_valid():
|
if query_form.is_valid():
|
||||||
new_query = Query.get(query_form['query_string'].value())
|
new_query = Query.get(query_form['query_string'].value())
|
||||||
@ -128,7 +128,7 @@ def edit(request, query_id):
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
query_form = search_forms.QueryForm(initial=dict(query_string=query.query_string))
|
query_form = search_forms.QueryForm(initial=dict(query_string=query.query_string))
|
||||||
searchpicks_formset = forms.SearchPicksFormSet(instance=query)
|
searchpicks_formset = forms.SearchPromotionsFormSet(instance=query)
|
||||||
|
|
||||||
return render(request, 'wagtailsearchpicks/edit.html', {
|
return render(request, 'wagtailsearchpicks/edit.html', {
|
||||||
'query_form': query_form,
|
'query_form': query_form,
|
||||||
|
Loading…
Reference in New Issue
Block a user