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)