0001-page-fix-slug-on-page-duplication-37733.patch
combo/data/models.py | ||
---|---|---|
174 | 174 |
max_order = Page.objects.all().aggregate(Max('order')).get('order__max') or 0 |
175 | 175 |
self.order = max_order + 1 |
176 | 176 |
if not self.slug: |
177 |
if Page.objects.count() == 0:
|
|
177 |
if not Page.objects.exists():
|
|
178 | 178 |
slug = 'index' |
179 | 179 |
else: |
180 | 180 |
base_slug = slugify(self.title)[:40] |
181 | 181 |
slug = base_slug.strip('-') |
182 | 182 |
i = 1 |
183 |
while True: |
|
184 |
try: |
|
185 |
Page.objects.get(slug=slug, parent_id=self.parent_id) |
|
186 |
except ObjectDoesNotExist: |
|
187 |
break |
|
183 |
while Page.objects.filter(slug=slug, parent_id=self.parent_id).exists(): |
|
188 | 184 |
i += 1 |
189 | 185 |
slug = '%s-%s' % (base_slug, i) |
190 | 186 |
self.slug = slug |
... | ... | |
442 | 438 |
new_page.pk = None |
443 | 439 |
# set title |
444 | 440 |
new_page.title = _('Copy of %s') % self.title |
441 |
# reset slug |
|
442 |
new_page.slug = None |
|
445 | 443 |
# reset snapshot |
446 | 444 |
new_page.snapshot = None |
447 | 445 |
# set order |
tests/test_pages.py | ||
---|---|---|
197 | 197 |
group1 = Group.objects.create(name='foobar') |
198 | 198 |
group2 = Group.objects.create(name='fooblah') |
199 | 199 | |
200 |
Page.objects.create() # page without snapshot, with slug 'index' |
|
200 | 201 |
page = Page.objects.create( |
201 | 202 |
title='foo', |
202 | 203 |
slug='foo', |
... | ... | |
213 | 214 |
new_page = page.duplicate() |
214 | 215 |
assert new_page.pk != page.pk |
215 | 216 |
assert new_page.title == 'Copy of foo' |
216 |
assert new_page.slug == page.slug
|
|
217 |
assert new_page.slug == 'copy-of-foo'
|
|
217 | 218 |
assert new_page.description == page.description |
218 | 219 |
assert new_page.parent is None |
219 | 220 |
assert new_page.snapshot is None |
... | ... | |
231 | 232 |
assert new_cell2.placeholder == cell2.placeholder |
232 | 233 |
assert list(new_cell2.groups.all()) == [] |
233 | 234 | |
235 |
# duplicate again ! |
|
236 |
new_page = page.duplicate() |
|
237 |
assert new_page.slug == 'copy-of-foo-2' |
|
238 | ||
234 | 239 |
parent = Page.objects.create() |
235 | 240 |
page.parent = parent |
236 | 241 |
page.save() |
237 |
- |