Add a can_choose_root flag to PageChooserBlock

pull/1837/head
Matt Westcott 2015-10-16 16:35:49 +01:00
rodzic c025e1d3e5
commit f668922893
3 zmienionych plików z 18 dodań i 2 usunięć

Wyświetl plik

@ -188,7 +188,13 @@ PageChooserBlock
``wagtail.wagtailcore.blocks.PageChooserBlock``
A control for selecting a page object, using Wagtail's page browser. The keyword argument ``required`` is accepted.
A control for selecting a page object, using Wagtail's page browser. The following keyword arguments are accepted:
``required`` (default: True)
If true, the field cannot be left blank.
``can_choose_root`` (default: False)
If true, the editor can choose the tree root as a page. Normally this would be undesirable, since the tree root is never a usable page, but in some specialised cases it may be appropriate; for example, a block providing a feed of related articles could use a PageChooserBlock to select which subsection articles will be taken from, with the root corresponding to 'everywhere'.
DocumentChooserBlock
~~~~~~~~~~~~~~~~~~~~

Wyświetl plik

@ -366,6 +366,10 @@ class ChooserBlock(FieldBlock):
class PageChooserBlock(ChooserBlock):
def __init__(self, can_choose_root=False, **kwargs):
self.can_choose_root = can_choose_root
super(PageChooserBlock, self).__init__(**kwargs)
@cached_property
def target_model(self):
from wagtail.wagtailcore.models import Page # TODO: allow limiting to specific page types
@ -374,7 +378,7 @@ class PageChooserBlock(ChooserBlock):
@cached_property
def widget(self):
from wagtail.wagtailadmin.widgets import AdminPageChooser
return AdminPageChooser
return AdminPageChooser(can_choose_root=self.can_choose_root)
def render_basic(self, value):
if value:

Wyświetl plik

@ -1302,6 +1302,7 @@ class TestPageChooserBlock(TestCase):
empty_form_html = block.render_form(None, 'page')
self.assertIn('<input id="page" name="page" placeholder="" type="hidden" />', empty_form_html)
self.assertIn('createPageChooser("page", ["wagtailcore.page"], null, false);', empty_form_html)
christmas_page = Page.objects.get(slug='christmas')
christmas_form_html = block.render_form(christmas_page, 'page')
@ -1309,6 +1310,11 @@ class TestPageChooserBlock(TestCase):
self.assertIn(expected_html, christmas_form_html)
self.assertIn("pick a page, any page", christmas_form_html)
def test_form_render_with_can_choose_root(self):
block = blocks.PageChooserBlock(help_text="pick a page, any page", can_choose_root=True)
empty_form_html = block.render_form(None, 'page')
self.assertIn('createPageChooser("page", ["wagtailcore.page"], null, true);', empty_form_html)
def test_form_response(self):
block = blocks.PageChooserBlock()
christmas_page = Page.objects.get(slug='christmas')