From 6b272c43e4b81e08346ac9ee6a688654d44d4b76 Mon Sep 17 00:00:00 2001 From: Lucas Moeskops Date: Wed, 14 Mar 2018 19:01:32 +0100 Subject: [PATCH] =?UTF-8?q?Issue=204334:=20Excluded=20fields=20are=20also?= =?UTF-8?q?=20excluded=20when=20a=20panel=20set=20is=20exp=E2=80=A6=20(#43?= =?UTF-8?q?63)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Issue 4334: Excluded fields are also excluded when a panel set is explicitly defined on a model. * Improved notation after review with @BertrandBordage * Incorrect field name in comment --- wagtail/admin/edit_handlers.py | 11 ++++++++++- wagtail/admin/tests/test_edit_handlers.py | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/wagtail/admin/edit_handlers.py b/wagtail/admin/edit_handlers.py index 35a9dc1d6..356edf0c7 100644 --- a/wagtail/admin/edit_handlers.py +++ b/wagtail/admin/edit_handlers.py @@ -63,7 +63,16 @@ def get_form_for_model( def extract_panel_definitions_from_model_class(model, exclude=None): if hasattr(model, 'panels'): - return model.panels + panels = model.panels + + if exclude is not None: + # Filter out fields in exclude + panels = [ + panel for panel in panels + if isinstance(panel, FieldPanel) and panel.field_name not in exclude + ] + + return panels panels = [] diff --git a/wagtail/admin/tests/test_edit_handlers.py b/wagtail/admin/tests/test_edit_handlers.py index 997a8860d..4c1a03966 100644 --- a/wagtail/admin/tests/test_edit_handlers.py +++ b/wagtail/admin/tests/test_edit_handlers.py @@ -208,6 +208,11 @@ class TestExtractPanelDefinitionsFromModelClass(TestCase): for panel in panels: self.assertNotEqual(panel.field_name, 'hostname') + def test_exclude_with_defined_panels(self): + Site.panels = [FieldPanel('hostname')] + panels = extract_panel_definitions_from_model_class(Site, exclude=['hostname']) + self.assertEquals([], panels) + def test_can_build_panel_list(self): # EventPage has no 'panels' definition, so one should be derived from the field list panels = extract_panel_definitions_from_model_class(EventPage)