Jelajahi Sumber

minor db fix

Nick Sweeting 4 tahun lalu
induk
melakukan
844b5c5e20
2 mengubah file dengan 17 tambahan dan 16 penghapusan
  1. 1 1
      archivebox/core/admin.py
  2. 16 15
      archivebox/core/models.py

+ 1 - 1
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
 

+ 16 - 15
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)
-                )
-
-                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
+            # 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
         else:
             return super().save(*args, **kwargs)