This commit is contained in:
Matt Westcott 2015-10-22 17:24:54 +01:00
commit 3e8b90e4b6
9 changed files with 73 additions and 13 deletions

View file

@ -12,6 +12,15 @@ def get_related_model(rel):
return rel.model
def get_related_parent_model(rel):
# In Django 1.7 and under, the parent model is accessed by doing: rel.parent_model
# This was renamed in Django 1.8 to rel.model.
if django.VERSION >= (1, 8):
return rel.model
else:
return rel.parent_model
def render_to_string(template_name, context=None, request=None, **kwargs):
if django.VERSION >= (1, 8):
return loader.render_to_string(

View file

@ -19,7 +19,7 @@ from taggit.managers import TaggableManager
from wagtail.wagtailadmin import widgets
from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.utils import camelcase_to_underscore, resolve_model_string
from wagtail.utils.compat import get_related_model
from wagtail.utils.compat import get_related_model, get_related_parent_model
# Form field properties to override whenever we encounter a model field
@ -525,7 +525,7 @@ class BaseChooserPanel(BaseFieldPanel):
def get_chosen_item(self):
field = self.instance._meta.get_field(self.field_name)
related_model = get_related_model(field.related)
related_model = get_related_parent_model(field.related)
try:
return getattr(self.instance, self.field_name)
except related_model.DoesNotExist:

View file

@ -1,7 +1,7 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
<h2>
{% blocktrans count counter=pages|length %}
{% blocktrans count counter=pages.paginator.count %}
There is one match
{% plural %}
There are {{ counter }} matches
@ -10,4 +10,7 @@
{% if pages %}
{% include "wagtailadmin/pages/listing/_list_choose.html" with show_parent=1 pages=pages parent_page=parent_page %}
{% url 'wagtailadmin_choose_page_search' as pagination_base_url %}
{% paginate pages base_url=pagination_base_url classnames="navigate-pages" %}
{% endif %}

View file

@ -52,6 +52,12 @@ function(modal) {
return false;
});
/* pagination links within search results should be AJAX-fetched
and the result loaded into .page-results (and ajaxified) */
$('.page-results a.navigate-pages', modal.body).click(function() {
$('.page-results', modal.body).load(this.href, ajaxifySearchResults);
return false;
});
}
/*

View file

@ -382,6 +382,16 @@ class TestPageChooserPanel(TestCase):
'<a href="/admin/pages/%d/edit/" class="edit-link button button-small button-secondary" target="_blank">Edit this page</a>' % self.christmas_page.id,
result)
def test_render_as_empty_field(self):
test_instance = PageChooserModel()
form = self.PageChooserForm(instance=test_instance)
page_chooser_panel = self.MyPageChooserPanel(instance=test_instance, form=form)
result = page_chooser_panel.render_as_field()
self.assertIn('<p class="help">help text</p>', result)
self.assertIn('<span class="title"></span>', result)
self.assertIn('Choose a page', result)
def test_render_error(self):
form = self.PageChooserForm({'page': ''}, instance=self.test_instance)
self.assertFalse(form.is_valid())

View file

@ -116,20 +116,20 @@ def search(request, parent_page_id=None):
depth=1 # never include root
)
pages = filter_page_type(pages, desired_classes)
pages = pages.search(search_form.cleaned_data['q'], fields=['title'])[:10]
pages = pages.search(search_form.cleaned_data['q'], fields=['title'])
else:
pages = Page.objects.none()
shown_pages = []
paginator, pages = paginate(request, pages, per_page=25)
for page in pages:
page.can_choose = True
shown_pages.append(page)
return render(
request, 'wagtailadmin/chooser/_search_results.html',
shared_context(request, {
'searchform': search_form,
'pages': shown_pages,
'pages': pages,
'page_type_string': page_type_string,
})
)

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0019_verbose_names_cleanup'),
]
operations = [
migrations.AlterField(
model_name='page',
name='first_published_at',
field=models.DateTimeField(editable=False, null=True, verbose_name='First published at', db_index=True),
),
]

View file

@ -239,7 +239,7 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed
locked = models.BooleanField(verbose_name=_('Locked'), default=False, editable=False)
first_published_at = models.DateTimeField(verbose_name=_('First published at'), null=True, editable=False)
first_published_at = models.DateTimeField(verbose_name=_('First published at'), null=True, editable=False, db_index=True)
latest_revision_created_at = models.DateTimeField(verbose_name=_('Latest revision created at'), null=True, editable=False)
search_fields = (

View file

@ -255,10 +255,10 @@ class TestSnippetChooserPanel(TestCase):
test_snippet = model.objects.create(
advert=Advert.objects.create(text=self.advert_text))
edit_handler_class = get_snippet_edit_handler(model)
form_class = edit_handler_class.get_form_class(model)
form = form_class(instance=test_snippet)
edit_handler = edit_handler_class(instance=test_snippet, form=form)
self.edit_handler_class = get_snippet_edit_handler(model)
self.form_class = self.edit_handler_class.get_form_class(model)
form = self.form_class(instance=test_snippet)
edit_handler = self.edit_handler_class(instance=test_snippet, form=form)
self.snippet_chooser_panel = [
panel for panel in edit_handler.children
@ -274,6 +274,19 @@ class TestSnippetChooserPanel(TestCase):
self.assertIn("Choose advert", field_html)
self.assertIn("Choose another advert", field_html)
def test_render_as_empty_field(self):
test_snippet = SnippetChooserModel()
form = self.form_class(instance=test_snippet)
edit_handler = self.edit_handler_class(instance=test_snippet, form=form)
snippet_chooser_panel = [
panel for panel in edit_handler.children
if getattr(panel, 'field_name', None) == 'advert'][0]
field_html = snippet_chooser_panel.render_as_field()
self.assertIn("Choose advert", field_html)
self.assertIn("Choose another advert", field_html)
def test_render_js(self):
self.assertIn('createSnippetChooser("id_advert", "tests/advert");',
self.snippet_chooser_panel.render_as_field())