From 30e0143e6a6bed89a0bd3fad63e7b1b379098832 Mon Sep 17 00:00:00 2001 From: elhussein almasri Date: Sun, 31 Mar 2024 22:18:50 +0000 Subject: [PATCH 1/3] Fix-exclude_fields_in_copy-with-DeferringRelatedManager --- wagtail/actions/copy_page.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wagtail/actions/copy_page.py b/wagtail/actions/copy_page.py index 267fb7ad38..f603919e9a 100644 --- a/wagtail/actions/copy_page.py +++ b/wagtail/actions/copy_page.py @@ -222,7 +222,11 @@ class CopyPageAction: ) for exclude_field in specific_page.exclude_fields_in_copy: - if exclude_field in revision_content and hasattr( + if hasattr(page_copy, exclude_field) and hasattr( + getattr(page_copy, exclude_field), "all" + ): + revision_content[exclude_field] = [] + elif exclude_field in revision_content and hasattr( page_copy, exclude_field ): revision_content[exclude_field] = getattr( From 2b14ad2a89bea391c6bc3d85b493d6218dce6a62 Mon Sep 17 00:00:00 2001 From: elhussein almasri Date: Tue, 16 Apr 2024 07:59:09 +0000 Subject: [PATCH 2/3] Add-unit-test --- .../migrations/0015_gallerypage_gallerypageimage.py | 9 +++++++++ wagtail/test/testapp/models.py | 9 ++++++++- wagtail/tests/test_page_model.py | 8 ++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/wagtail/test/testapp/migrations/0015_gallerypage_gallerypageimage.py b/wagtail/test/testapp/migrations/0015_gallerypage_gallerypageimage.py index c6f9dc3a51..e7bd034c14 100644 --- a/wagtail/test/testapp/migrations/0015_gallerypage_gallerypageimage.py +++ b/wagtail/test/testapp/migrations/0015_gallerypage_gallerypageimage.py @@ -66,6 +66,15 @@ class Migration(migrations.Migration): to="tests.gallerypage", ), ), + ( + "exclude_field", + modelcluster.fields.ParentalKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="related_manager", + to="tests.pagewithexcludedcopyfield", + ), + ), ], options={ "ordering": ["sort_order"], diff --git a/wagtail/test/testapp/models.py b/wagtail/test/testapp/models.py index cb5a6b5dcf..c0baea37b0 100644 --- a/wagtail/test/testapp/models.py +++ b/wagtail/test/testapp/models.py @@ -217,12 +217,13 @@ class PageWithExcludedCopyField(Page): # Exclude this field from being copied special_field = models.CharField(blank=True, max_length=255, default="Very Special") - exclude_fields_in_copy = ["special_field"] + exclude_fields_in_copy = ["special_field", "related_manager"] content_panels = [ FieldPanel("title", classname="title"), FieldPanel("special_field"), FieldPanel("content"), + MultipleChooserPanel("related_manager", chooser_field_name="image"), ] @@ -2193,6 +2194,12 @@ class GalleryPageImage(Orderable): page = ParentalKey( "tests.GalleryPage", related_name="gallery_images", on_delete=models.CASCADE ) + exclude_field = ParentalKey( + "tests.PageWithExcludedCopyField", + related_name="related_manager", + on_delete=models.CASCADE, + null=True, + ) image = models.ForeignKey( "wagtailimages.Image", on_delete=models.CASCADE, diff --git a/wagtail/tests/test_page_model.py b/wagtail/tests/test_page_model.py index 6026cbde67..772958dadf 100644 --- a/wagtail/tests/test_page_model.py +++ b/wagtail/tests/test_page_model.py @@ -1912,14 +1912,18 @@ class TestCopyPage(TestCase): page.save_revision() new_page = page.copy(to=homepage, update_attrs={"slug": "disco-2"}) exclude_field = new_page.latest_revision.content["special_field"] - + exclude_field_related_manager = new_page.latest_revision.content[ + "related_manager" + ] + self.assertEqual(page.title, new_page.title) self.assertNotEqual(page.id, new_page.id) self.assertNotEqual(page.path, new_page.path) # special_field is in the list to be excluded self.assertNotEqual(page.special_field, new_page.special_field) self.assertEqual(new_page.special_field, exclude_field) - + self.assertEqual(exclude_field_related_manager, []) + def test_page_with_generic_relation(self): """Test that a page with a GenericRelation will have that relation ignored when copying. From e0958c2cb8d2fa3748e9050244bdf882511f0e6d Mon Sep 17 00:00:00 2001 From: elhussein almasri Date: Tue, 16 Apr 2024 08:25:04 +0000 Subject: [PATCH 3/3] format --- wagtail/tests/test_page_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/tests/test_page_model.py b/wagtail/tests/test_page_model.py index 772958dadf..3955b97a94 100644 --- a/wagtail/tests/test_page_model.py +++ b/wagtail/tests/test_page_model.py @@ -1915,7 +1915,7 @@ class TestCopyPage(TestCase): exclude_field_related_manager = new_page.latest_revision.content[ "related_manager" ] - + self.assertEqual(page.title, new_page.title) self.assertNotEqual(page.id, new_page.id) self.assertNotEqual(page.path, new_page.path) @@ -1923,7 +1923,7 @@ class TestCopyPage(TestCase): self.assertNotEqual(page.special_field, new_page.special_field) self.assertEqual(new_page.special_field, exclude_field) self.assertEqual(exclude_field_related_manager, []) - + def test_page_with_generic_relation(self): """Test that a page with a GenericRelation will have that relation ignored when copying.