kopia lustrzana https://github.com/wagtail/wagtail
				
				
				
			Add a can_choose_root flag to PageChooserBlock
							rodzic
							
								
									c025e1d3e5
								
							
						
					
					
						commit
						f668922893
					
				| 
						 | 
					@ -188,7 +188,13 @@ PageChooserBlock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``wagtail.wagtailcore.blocks.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
 | 
					DocumentChooserBlock
 | 
				
			||||||
~~~~~~~~~~~~~~~~~~~~
 | 
					~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -366,6 +366,10 @@ class ChooserBlock(FieldBlock):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PageChooserBlock(ChooserBlock):
 | 
					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
 | 
					    @cached_property
 | 
				
			||||||
    def target_model(self):
 | 
					    def target_model(self):
 | 
				
			||||||
        from wagtail.wagtailcore.models import Page  # TODO: allow limiting to specific page types
 | 
					        from wagtail.wagtailcore.models import Page  # TODO: allow limiting to specific page types
 | 
				
			||||||
| 
						 | 
					@ -374,7 +378,7 @@ class PageChooserBlock(ChooserBlock):
 | 
				
			||||||
    @cached_property
 | 
					    @cached_property
 | 
				
			||||||
    def widget(self):
 | 
					    def widget(self):
 | 
				
			||||||
        from wagtail.wagtailadmin.widgets import AdminPageChooser
 | 
					        from wagtail.wagtailadmin.widgets import AdminPageChooser
 | 
				
			||||||
        return AdminPageChooser
 | 
					        return AdminPageChooser(can_choose_root=self.can_choose_root)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def render_basic(self, value):
 | 
					    def render_basic(self, value):
 | 
				
			||||||
        if value:
 | 
					        if value:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1302,6 +1302,7 @@ class TestPageChooserBlock(TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        empty_form_html = block.render_form(None, 'page')
 | 
					        empty_form_html = block.render_form(None, 'page')
 | 
				
			||||||
        self.assertIn('<input id="page" name="page" placeholder="" type="hidden" />', empty_form_html)
 | 
					        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_page = Page.objects.get(slug='christmas')
 | 
				
			||||||
        christmas_form_html = block.render_form(christmas_page, 'page')
 | 
					        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(expected_html, christmas_form_html)
 | 
				
			||||||
        self.assertIn("pick a page, any page", 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):
 | 
					    def test_form_response(self):
 | 
				
			||||||
        block = blocks.PageChooserBlock()
 | 
					        block = blocks.PageChooserBlock()
 | 
				
			||||||
        christmas_page = Page.objects.get(slug='christmas')
 | 
					        christmas_page = Page.objects.get(slug='christmas')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Ładowanie…
	
		Reference in New Issue