page: fix slug on page duplication (#37733)

This commit is contained in:
Lauréline Guérin 2019-11-19 08:27:46 +01:00
parent 879be68be4
commit 8ed1923e44
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 10 additions and 7 deletions

View File

@ -174,17 +174,13 @@ class Page(models.Model):
max_order = Page.objects.all().aggregate(Max('order')).get('order__max') or 0
self.order = max_order + 1
if not self.slug:
if Page.objects.count() == 0:
if not Page.objects.exists():
slug = 'index'
else:
base_slug = slugify(self.title)[:40]
slug = base_slug.strip('-')
i = 1
while True:
try:
Page.objects.get(slug=slug, parent_id=self.parent_id)
except ObjectDoesNotExist:
break
while Page.objects.filter(slug=slug, parent_id=self.parent_id).exists():
i += 1
slug = '%s-%s' % (base_slug, i)
self.slug = slug
@ -442,6 +438,8 @@ class Page(models.Model):
new_page.pk = None
# set title
new_page.title = _('Copy of %s') % self.title
# reset slug
new_page.slug = None
# reset snapshot
new_page.snapshot = None
# set order

View File

@ -197,6 +197,7 @@ def test_duplicate_page():
group1 = Group.objects.create(name='foobar')
group2 = Group.objects.create(name='fooblah')
Page.objects.create() # page without snapshot, with slug 'index'
page = Page.objects.create(
title='foo',
slug='foo',
@ -213,7 +214,7 @@ def test_duplicate_page():
new_page = page.duplicate()
assert new_page.pk != page.pk
assert new_page.title == 'Copy of foo'
assert new_page.slug == page.slug
assert new_page.slug == 'copy-of-foo'
assert new_page.description == page.description
assert new_page.parent is None
assert new_page.snapshot is None
@ -231,6 +232,10 @@ def test_duplicate_page():
assert new_cell2.placeholder == cell2.placeholder
assert list(new_cell2.groups.all()) == []
# duplicate again !
new_page = page.duplicate()
assert new_page.slug == 'copy-of-foo-2'
parent = Page.objects.create()
page.parent = parent
page.save()