From 606f3dacbb8e228270ae9896bcc4f41874db206d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Jan 2020 17:25:46 -0500 Subject: [PATCH] Fixes #3721: Allow Unicode characters in tag slugs --- docs/release-notes/version-2.7.md | 1 + netbox/extras/models.py | 8 ++++++++ netbox/extras/tests/test_models.py | 11 ++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/version-2.7.md b/docs/release-notes/version-2.7.md index 760dd21d9..ed9fdd28d 100644 --- a/docs/release-notes/version-2.7.md +++ b/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 diff --git a/netbox/extras/models.py b/netbox/extras/models.py index 1ef503297..a03494bb2 100644 --- a/netbox/extras/models.py +++ b/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( diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index e3f98ca0c..22e6e1f8f 100644 --- a/netbox/extras/tests/test_models.py +++ b/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-台灣')