diff --git a/wagtail/admin/panels/title_field_panel.py b/wagtail/admin/panels/title_field_panel.py index ac8d4c8ec3..39268c8e75 100644 --- a/wagtail/admin/panels/title_field_panel.py +++ b/wagtail/admin/panels/title_field_panel.py @@ -78,7 +78,11 @@ class TitleFieldPanel(FieldPanel): actions = [widget.attrs.get("data-action", None)] + self.apply_actions attrs["data-action"] = " ".join(filter(None, actions)) - targets = [self.get_target_selector(target) for target in panel.targets] + targets = [ + self.get_target_selector(target) + for target in panel.targets + if target in self.form.fields + ] attrs["data-w-sync-target-value"] = ", ".join(filter(None, targets)) placeholder = self.get_placeholder() diff --git a/wagtail/admin/tests/test_edit_handlers.py b/wagtail/admin/tests/test_edit_handlers.py index 353145cca4..e6228ae3ce 100644 --- a/wagtail/admin/tests/test_edit_handlers.py +++ b/wagtail/admin/tests/test_edit_handlers.py @@ -2260,6 +2260,25 @@ class TestTitleFieldPanel(WagtailTestUtils, TestCase): "focus->w-sync#check blur->w-sync#apply change->w-sync#apply keyup->w-sync#apply", ) + def test_form_without_slugfield(self): + html = self.get_edit_handler_html(ObjectList([TitleFieldPanel("title")])) + + self.assertIsNotNone(html.find(attrs={"class": "w-panel title"})) + + attrs = html.find("input").attrs + self.assertEqual(attrs["data-w-sync-target-value"], "") + + def test_form_with_readonly_slugfield(self): + html = self.get_edit_handler_html( + ObjectList([TitleFieldPanel("title"), FieldPanel("slug", read_only=True)]), + instance=EventPage(), + ) + + self.assertIsNotNone(html.find(attrs={"class": "w-panel title"})) + + attrs = html.find("input").attrs + self.assertEqual(attrs["data-w-sync-target-value"], "") + def test_not_using_apply_actions_if_live(self): """ If the Page (or any model) has `live = True`, do not apply the actions by default.