1
0
Fork 0
mirror of synced 2024-07-01 12:30:24 +12:00

minor db fix

This commit is contained in:
Nick Sweeting 2021-02-28 22:54:04 -05:00
parent 62089fdb22
commit 844b5c5e20
2 changed files with 16 additions and 15 deletions

View file

@ -15,7 +15,7 @@ from django import forms
from ..util import htmldecode, urldecode, ansi_to_html from ..util import htmldecode, urldecode, ansi_to_html
from core.models import Snapshot, ArchiveResult, Tag from core.models import Snapshot, ArchiveResult, Tag
from core.forms import AddLinkForm, TagField from core.forms import AddLinkForm
from core.mixins import SearchResultsAdminMixin from core.mixins import SearchResultsAdminMixin

View file

@ -33,7 +33,7 @@ class Tag(models.Model):
Based on django-taggit model Based on django-taggit model
""" """
name = models.CharField(verbose_name="name", unique=True, blank=False, max_length=100) 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: class Meta:
verbose_name = "Tag" verbose_name = "Tag"
@ -52,20 +52,21 @@ class Tag(models.Model):
if self._state.adding and not self.slug: if self._state.adding and not self.slug:
self.slug = self.slugify(self.name) self.slug = self.slugify(self.name)
with transaction.atomic(): # if name is different but slug conficts with another tags slug, append a counter
slugs = set( # with transaction.atomic():
type(self) slugs = set(
._default_manager.filter(slug__startswith=self.slug) type(self)
.values_list("slug", flat=True) ._default_manager.filter(slug__startswith=self.slug)
) .values_list("slug", flat=True)
)
i = None i = None
while True: while True:
slug = self.slugify(self.name, i) slug = self.slugify(self.name, i)
if slug not in slugs: if slug not in slugs:
self.slug = slug self.slug = slug
return super().save(*args, **kwargs) return super().save(*args, **kwargs)
i = 1 if i is None else i+1 i = 1 if i is None else i+1
else: else:
return super().save(*args, **kwargs) return super().save(*args, **kwargs)