0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-12-01 03:31:04 +01:00

Merge pull request #769 from kaedroho/issue-735

Don't update descendant urls if slug not updated. Fixes #735
This commit is contained in:
Matt Westcott 2014-10-30 15:07:48 +00:00
commit 10f4d05894
2 changed files with 31 additions and 8 deletions

View File

@ -337,14 +337,17 @@ class Page(six.with_metaclass(PageBase, MP_Node, ClusterableModel, index.Indexed
# has been set and so we can safely call get_parent
self.set_url_path(self.get_parent())
else:
# see if the slug has changed from the record in the db, in which case we need to
# update url_path of self and all descendants
old_record = Page.objects.get(id=self.id)
if old_record.slug != self.slug:
self.set_url_path(self.get_parent())
update_descendant_url_paths = True
old_url_path = old_record.url_path
new_url_path = self.url_path
# Check that we are committing the slug to the database
# Basically: If update_fields has been specified, and slug is not included, skip this step
if not ('update_fields' in kwargs and 'slug' not in kwargs['update_fields']):
# see if the slug has changed from the record in the db, in which case we need to
# update url_path of self and all descendants
old_record = Page.objects.get(id=self.id)
if old_record.slug != self.slug:
self.set_url_path(self.get_parent())
update_descendant_url_paths = True
old_url_path = old_record.url_path
new_url_path = self.url_path
result = super(Page, self).save(*args, **kwargs)

View File

@ -600,3 +600,23 @@ class TestSubpageTypeBusinessRules(TestCase):
# BusinessSubIndex only allows BusinessIndex as a parent
self.assertNotIn(ContentType.objects.get_for_model(SimplePage), BusinessSubIndex.allowed_parent_page_types())
self.assertIn(ContentType.objects.get_for_model(BusinessIndex), BusinessSubIndex.allowed_parent_page_types())
class TestIssue735(TestCase):
"""
Issue 735 reports that URL paths of child pages are not
updated correctly when slugs of parent pages are updated
"""
fixtures = ['test.json']
def test_child_urls_updated_on_parent_publish(self):
event_index = Page.objects.get(url_path='/home/events/')
christmas_event = EventPage.objects.get(url_path='/home/events/christmas/')
# Change the event index slug and publish it
event_index.slug = 'old-events'
event_index.save_revision().publish()
# Check that the christmas events url path updated correctly
new_christmas_event = EventPage.objects.get(id=christmas_event.id)
self.assertEqual(new_christmas_event.url_path, '/home/old-events/christmas/')