Skip to content

Commit 83aeee0

Browse files
committed
make Category.slug unique
1 parent ddf1330 commit 83aeee0

File tree

6 files changed

+33
-3
lines changed

6 files changed

+33
-3
lines changed

README.rst

+6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ Django Categories grew out of our need to provide a basic hierarchical taxonomy
1313

1414
As a news site, our stories, photos, and other content get divided into "sections" and we wanted all the apps to use the same set of sections. As our needs grew, the Django Categories grew in the functionality it gave to category handling within web pages.
1515

16+
=======
17+
New in 2.0
18+
==========
19+
20+
* Category.slug becomes unique. You must remove all duplicates in category slugs before running migrations.
21+
1622
New in 1.4
1723
==========
1824

categories/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class CategoryBase(MPTTModel):
4444
verbose_name=_('parent'),
4545
)
4646
name = models.CharField(max_length=100, verbose_name=_('name'))
47-
slug = models.SlugField(verbose_name=_('slug'))
47+
slug = models.SlugField(verbose_name=_('slug'), unique=True)
4848
active = models.BooleanField(default=True, verbose_name=_('active'))
4949

5050
objects = CategoryManager()

categories/fixtures/musicgenres.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2292,7 +2292,7 @@
22922292
"name": "Country pop",
22932293
"parent": 142,
22942294
"level": 1,
2295-
"slug": "country-pop",
2295+
"slug": "country-pop1",
22962296
"lft": 100,
22972297
"tree_id": 10,
22982298
"order": 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.0.9 on 2018-10-05 13:59
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('categories', '0002_auto_20170217_1111'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='category',
15+
name='slug',
16+
field=models.SlugField(unique=True, verbose_name='slug'),
17+
),
18+
]

categories/tests/test_category_import.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def testMixingTabsSpaces(self):
5757
Should raise an exception.
5858
"""
5959
string1 = ["cat1", " cat1-1", "\tcat1-2-FAIL!", ""]
60-
string2 = ["cat1", "\tcat1-1", " cat1-2-FAIL!", ""]
60+
string2 = ["cat2", "\tcat2-1", " cat2-2-FAIL!", ""]
6161
cmd = Command()
6262

6363
# raise Exception

categories/tests/test_models.py

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django.core.files import File
44
from django.core.files.uploadedfile import UploadedFile
5+
from django.db.utils import IntegrityError
56

67
from categories.models import Category
78
from django.test import TestCase
@@ -19,3 +20,8 @@ def test_thumbnail(self):
1920
self.assertEqual(category.pk, 1)
2021
self.assertEqual(category.thumbnail_width, 640)
2122
self.assertEqual(category.thumbnail_height, 480)
23+
24+
def test_duplicate_slug_fail(self):
25+
Category.objects.create(name='Test Category', slug='test-category')
26+
with self.assertRaises(IntegrityError):
27+
Category.objects.create(name='Test Category1 ', slug='test-category')

0 commit comments

Comments
 (0)