diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index d619c780..c849bb63 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -15,7 +15,7 @@ from django import forms from ..util import htmldecode, urldecode, ansi_to_html from core.models import Snapshot, ArchiveResult, Tag -from core.forms import AddLinkForm, TagField +from core.forms import AddLinkForm from core.mixins import SearchResultsAdminMixin diff --git a/archivebox/core/models.py b/archivebox/core/models.py index 9e2911e2..72eed2c3 100644 --- a/archivebox/core/models.py +++ b/archivebox/core/models.py @@ -33,7 +33,7 @@ class Tag(models.Model): Based on django-taggit model """ name = models.CharField(verbose_name="name", unique=True, blank=False, max_length=100) - slug = models.SlugField(verbose_name="slug", unique=True, max_length=100) + slug = models.SlugField(verbose_name="slug", unique=True, blank=True, max_length=100) class Meta: verbose_name = "Tag" @@ -52,20 +52,21 @@ class Tag(models.Model): if self._state.adding and not self.slug: self.slug = self.slugify(self.name) - with transaction.atomic(): - slugs = set( - type(self) - ._default_manager.filter(slug__startswith=self.slug) - .values_list("slug", flat=True) - ) + # if name is different but slug conficts with another tags slug, append a counter + # with transaction.atomic(): + slugs = set( + type(self) + ._default_manager.filter(slug__startswith=self.slug) + .values_list("slug", flat=True) + ) - i = None - while True: - slug = self.slugify(self.name, i) - if slug not in slugs: - self.slug = slug - return super().save(*args, **kwargs) - i = 1 if i is None else i+1 + i = None + while True: + slug = self.slugify(self.name, i) + if slug not in slugs: + self.slug = slug + return super().save(*args, **kwargs) + i = 1 if i is None else i+1 else: return super().save(*args, **kwargs)