Skip to content

Commit c2d08c2

Browse files
committed
Added regex to exempt abugidas from standard slugify. Added a unique_together constraint for CustomTag name and slug. Aaltered slug field to not be unique.
1 parent 51ba412 commit c2d08c2

File tree

1 file changed

+34
-15
lines changed

1 file changed

+34
-15
lines changed

project/tagging/models.py

+34-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import uuid
2+
import regex
23
from taggit.models import TagBase, GenericTaggedItemBase, TaggedItemBase
34
from django.db import models
45
from django.utils.text import slugify
@@ -8,34 +9,52 @@
89

910
class CustomTag(TagBase):
1011
guid = models.UUIDField(default=uuid.uuid1, editable=False)
11-
slug = models.SlugField(
12-
verbose_name=_("Slug"),
13-
unique=True,
14-
max_length=100,
15-
allow_unicode=True
16-
)
12+
slug = models.SlugField(verbose_name=_("Slug"), max_length=100, allow_unicode=True)
1713
name = models.CharField(verbose_name=_("Name"), unique=True, max_length=100)
1814

1915
class Meta:
2016
db_table = "tagging_custom_tag"
2117
verbose_name = _("Tag")
2218
verbose_name_plural = _("Tags")
2319
app_label = 'tagging'
24-
25-
def save(self, *args, **kwargs):
26-
self.slug = self.slugify(self.name)
27-
self.full_clean()
28-
return super().save(*args, **kwargs)
20+
unique_together = ('name', 'slug',)
2921

3022
def slugify(self, tag, i=None):
31-
return slugify(tag, allow_unicode=True)
23+
abugidas = regex.compile(
24+
u"[\p{Bengali}"
25+
u"\p{Buhid}"
26+
u"\p{Devanagari}"
27+
u"\p{Gujarati}"
28+
u"\p{Gurmukhi}"
29+
u"\p{Hanunoo}"
30+
u"\p{Kannada}"
31+
u"\p{Khmer}"
32+
u"\p{Lao}"
33+
u"\p{Limbu}"
34+
u"\p{Malayalam}"
35+
u"\p{Mongolian}"
36+
u"\p{Myanmar}"
37+
u"\p{Phags-pa}"
38+
u"\p{Sinhala}"
39+
u"\p{Tagalog}"
40+
u"\p{Tamil}"
41+
u"\p{Telugu}"
42+
u"\p{Thaana}"
43+
u"\p{Thai}"
44+
u"\p{Tibetan}"
45+
u"\p{Yi}]+", regex.VERBOSE)
46+
47+
whitespace = regex.compile(u"\p{Z}+")
48+
49+
if regex.search(abugidas, tag):
50+
return regex.sub(whitespace, '-', tag.strip().lower())
51+
else:
52+
return slugify(tag, allow_unicode=True)
53+
3254

3355
class TaggedItems(GenericTaggedItemBase, TaggedItemBase):
3456
tag = models.ForeignKey(
3557
CustomTag,
3658
on_delete=models.CASCADE,
3759
related_name="%(app_label)s_%(class)s_items",
3860
)
39-
40-
class Meta:
41-
unique_together = ("content_type", "object_id", "tag")

0 commit comments

Comments
 (0)