kopia lustrzana https://github.com/wagtail/wagtail
Update Page.copy_for_translation to create parents as aliases
rodzic
674fa8e27a
commit
7af655d0d1
|
@ -2082,7 +2082,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
|
||||||
create_alias.alters_data = True
|
create_alias.alters_data = True
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def copy_for_translation(self, locale, copy_parents=False, exclude_fields=None):
|
def copy_for_translation(self, locale, copy_parents=False, alias=False, exclude_fields=None):
|
||||||
"""
|
"""
|
||||||
Copies this page for the specified locale.
|
Copies this page for the specified locale.
|
||||||
"""
|
"""
|
||||||
|
@ -2098,7 +2098,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
|
||||||
raise ParentNotTranslatedError
|
raise ParentNotTranslatedError
|
||||||
|
|
||||||
translated_parent = parent.copy_for_translation(
|
translated_parent = parent.copy_for_translation(
|
||||||
locale, copy_parents=True
|
locale, copy_parents=True, alias=True
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Don't duplicate the root page for translation. Create new locale as a sibling
|
# Don't duplicate the root page for translation. Create new locale as a sibling
|
||||||
|
@ -2111,25 +2111,34 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
|
||||||
# Find available slug for new page
|
# Find available slug for new page
|
||||||
slug = find_available_slug(translated_parent, slug)
|
slug = find_available_slug(translated_parent, slug)
|
||||||
|
|
||||||
# Update locale on translatable child objects as well
|
if alias:
|
||||||
def process_child_object(
|
return self.create_alias(
|
||||||
original_page, page_copy, child_relation, child_object
|
parent=translated_parent,
|
||||||
):
|
update_slug=slug,
|
||||||
if isinstance(child_object, TranslatableMixin):
|
update_locale=locale,
|
||||||
child_object.locale = locale
|
reset_translation_key=False,
|
||||||
|
)
|
||||||
|
|
||||||
return self.copy(
|
else:
|
||||||
to=translated_parent,
|
# Update locale on translatable child objects as well
|
||||||
update_attrs={
|
def process_child_object(
|
||||||
"locale": locale,
|
original_page, page_copy, child_relation, child_object
|
||||||
"slug": slug,
|
):
|
||||||
},
|
if isinstance(child_object, TranslatableMixin):
|
||||||
copy_revisions=False,
|
child_object.locale = locale
|
||||||
keep_live=False,
|
|
||||||
reset_translation_key=False,
|
return self.copy(
|
||||||
process_child_object=process_child_object,
|
to=translated_parent,
|
||||||
exclude_fields=exclude_fields,
|
update_attrs={
|
||||||
)
|
"locale": locale,
|
||||||
|
"slug": slug,
|
||||||
|
},
|
||||||
|
copy_revisions=False,
|
||||||
|
keep_live=False,
|
||||||
|
reset_translation_key=False,
|
||||||
|
process_child_object=process_child_object,
|
||||||
|
exclude_fields=exclude_fields,
|
||||||
|
)
|
||||||
|
|
||||||
copy_for_translation.alters_data = True
|
copy_for_translation.alters_data = True
|
||||||
|
|
||||||
|
|
|
@ -2010,6 +2010,17 @@ class TestCopyForTranslation(TestCase):
|
||||||
# self.assertEqual(ffr_award.translation_key, en_award.translation_key)
|
# self.assertEqual(ffr_award.translation_key, en_award.translation_key)
|
||||||
# self.assertEqual(list(fr_award.get_translations()), [en_award])
|
# self.assertEqual(list(fr_award.get_translations()), [en_award])
|
||||||
|
|
||||||
|
def test_copies_missing_parents_as_aliases(self):
|
||||||
|
fr_eventpage = self.en_eventpage.copy_for_translation(self.fr_locale, copy_parents=True)
|
||||||
|
fr_eventindex = fr_eventpage.get_parent()
|
||||||
|
|
||||||
|
# Check parent is a translation of its English original
|
||||||
|
self.assertEqual(fr_eventindex.locale, self.fr_locale)
|
||||||
|
self.assertEqual(fr_eventindex.translation_key, self.en_eventindex.translation_key)
|
||||||
|
|
||||||
|
# Check parent is also an alias of its English original
|
||||||
|
self.assertEqual(fr_eventindex.alias_of, self.en_eventindex)
|
||||||
|
|
||||||
|
|
||||||
class TestSubpageTypeBusinessRules(TestCase, WagtailTestUtils):
|
class TestSubpageTypeBusinessRules(TestCase, WagtailTestUtils):
|
||||||
def test_allowed_subpage_models(self):
|
def test_allowed_subpage_models(self):
|
||||||
|
|
Ładowanie…
Reference in New Issue