Просмотр исходного кода

Fixes #3721: Allow Unicode characters in tag slugs

Jeremy Stretch 6 лет назад
Родитель
Сommit
606f3dacbb
3 измененных файлов с 19 добавлено и 1 удалено
  1. 1 0
      docs/release-notes/version-2.7.md
  2. 8 0
      netbox/extras/models.py
  3. 10 1
      netbox/extras/tests/test_models.py

+ 1 - 0
docs/release-notes/version-2.7.md

@@ -7,6 +7,7 @@
 
 ## Bug Fixes
 
+* [#3721](https://github.com/netbox-community/netbox/issues/3721) - Allow Unicode characters in tag slugs
 * [#3951](https://github.com/netbox-community/netbox/issues/3951) - Fix exception in webhook worker due to missing constant
 * [#3953](https://github.com/netbox-community/netbox/issues/3953) - Fix validation error when creating child devices
 

+ 8 - 0
netbox/extras/models.py

@@ -10,6 +10,7 @@ from django.db import models
 from django.http import HttpResponse
 from django.template import Template, Context
 from django.urls import reverse
+from django.utils.text import slugify
 from taggit.models import TagBase, GenericTaggedItemBase
 
 from utilities.fields import ColorField
@@ -952,6 +953,13 @@ class Tag(TagBase, ChangeLoggedModel):
     def get_absolute_url(self):
         return reverse('extras:tag', args=[self.slug])
 
+    def slugify(self, tag, i=None):
+        # Allow Unicode in Tag slugs (avoids empty slugs for Tags with all-Unicode names)
+        slug = slugify(tag, allow_unicode=True)
+        if i is not None:
+            slug += "_%d" % i
+        return slug
+
 
 class TaggedItem(GenericTaggedItemBase):
     tag = models.ForeignKey(

+ 10 - 1
netbox/extras/tests/test_models.py

@@ -3,7 +3,7 @@ from django.test import TestCase
 
 from dcim.models import Site
 from extras.choices import TemplateLanguageChoices
-from extras.models import Graph
+from extras.models import Graph, Tag
 
 
 class GraphTest(TestCase):
@@ -44,3 +44,12 @@ class GraphTest(TestCase):
 
         self.assertEqual(graph.embed_url(self.site), RENDERED_TEXT)
         self.assertEqual(graph.embed_link(self.site), RENDERED_TEXT)
+
+
+class TagTest(TestCase):
+
+    def test_create_tag_unicode(self):
+        tag = Tag(name='Testing Unicode: 台灣')
+        tag.save()
+
+        self.assertEqual(tag.slug, 'testing-unicode-台灣')