0001-categories-do-not-create-duplicate-slugs-38612.patch
tests/test_categories.py | ||
---|---|---|
45 | 45 |
assert test.url_name == 'test' |
46 | 46 | |
47 | 47 | |
48 |
def test_duplicate_urlname(): |
|
49 |
Category.wipe() |
|
50 |
test = Category() |
|
51 |
test.name = 'Test' |
|
52 |
test.store() |
|
53 |
test = Category.get(1) |
|
54 |
assert test.url_name == 'test' |
|
55 | ||
56 |
test2 = Category() |
|
57 |
test2.name = 'Test' |
|
58 |
test2.store() |
|
59 |
test2 = Category.get(2) |
|
60 |
assert test2.url_name == 'test-2' |
|
61 | ||
62 | ||
48 | 63 |
def test_sort_positions(): |
49 | 64 |
Category.wipe() |
50 | 65 |
wcs/categories.py | ||
---|---|---|
42 | 42 | |
43 | 43 |
def migrate(self): |
44 | 44 |
changed = False |
45 | ||
46 | 45 |
if not self.url_name: |
47 |
self.url_name = simplify(self.name) |
|
48 |
changed = True |
|
49 | ||
46 |
changed = True # trigger new slug in .store() |
|
50 | 47 |
if changed: |
51 | 48 |
self.store() |
52 | 49 | |
... | ... | |
64 | 61 |
return True |
65 | 62 |
return False |
66 | 63 | |
64 |
def store(self, *args, **kwargs): |
|
65 |
if not self.url_name: |
|
66 |
existing_slugs = {x.url_name: True for x in self.select(ignore_migration=True, ignore_errors=True)} |
|
67 |
base_slug = simplify(self.name) |
|
68 |
self.url_name = base_slug |
|
69 |
i = 2 |
|
70 |
while self.url_name in existing_slugs: |
|
71 |
self.url_name = '%s-%s' % (base_slug, i) |
|
72 |
i += 1 |
|
73 |
return super(Category, self).store(*args, **kwargs) |
|
74 | ||
67 | 75 |
@classmethod |
68 | 76 |
def sort_by_position(cls, categories): |
69 | 77 |
# move categories with no defined position to the end |
70 |
- |