Skip to content

Commit d88a28f

Browse files
authored
allow same name for category in different languages (#189)
* allow same name for category in different languages * fixing flake8 issues * updated migration for django 4.1
1 parent 9961e68 commit d88a28f

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 4.1.8 on 2023-07-25 15:47
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('cms', '__latest__'),
10+
('djangocms_alias', '0002_auto_20200723_1424'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='aliasplugin',
16+
name='cmsplugin_ptr',
17+
field=models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='%(app_label)s_%(class)s', serialize=False, to='cms.cmsplugin'),
18+
),
19+
migrations.AlterField(
20+
model_name='categorytranslation',
21+
name='name',
22+
field=models.CharField(max_length=120, verbose_name='name'),
23+
),
24+
migrations.AlterUniqueTogether(
25+
name='categorytranslation',
26+
unique_together={('language_code', 'master'), ('name', 'language_code')},
27+
),
28+
]

djangocms_alias/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class Category(TranslatableModel):
5252
name=models.CharField(
5353
verbose_name=_('name'),
5454
max_length=120,
55-
unique=True,
5655
),
56+
meta={'unique_together': [('name', 'language_code')]},
5757
)
5858

5959
class Meta:

tests/test_models.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django import get_version
44
from django.contrib.sites.models import Site
5+
from django.core.exceptions import ValidationError
56
from django.urls import reverse
67

78
from cms.api import add_plugin, create_title
@@ -420,3 +421,29 @@ def test_category_get_absolute_url(self):
420421
)
421422

422423
self.assertEqual(category.get_absolute_url(), expected)
424+
425+
def test_category_name_same_across_languages(self):
426+
"""
427+
Category name may be the same across languages
428+
"""
429+
category = Category.objects.create(name='Samename A')
430+
category.set_current_language('de')
431+
category.name = "Samename A"
432+
try:
433+
category.validate_unique()
434+
except ValidationError:
435+
self.fail("Same Category name should be allowed across two languages.")
436+
437+
category.set_current_language('en')
438+
self.assertEqual(category.name, 'Samename A')
439+
category.set_current_language('de')
440+
self.assertEqual(category.name, 'Samename A')
441+
442+
def test_category_name_unique_for_language(self):
443+
"""
444+
Category name can't be the same in one language for two different categories
445+
"""
446+
with self.login_user_context(self.superuser):
447+
Category.objects.create(name='Samename B')
448+
c = Category(name='Samename B')
449+
self.assertRaises(ValidationError, c.validate_unique)

0 commit comments

Comments
 (0)