diff --git a/data/db.sqlite3 b/data/db.sqlite3 index efdab92..819d588 100644 Binary files a/data/db.sqlite3 and b/data/db.sqlite3 differ diff --git a/links/migrations/0033_add_tag_slug_description.py b/links/migrations/0033_add_tag_slug_description.py new file mode 100644 index 0000000..5ada891 --- /dev/null +++ b/links/migrations/0033_add_tag_slug_description.py @@ -0,0 +1,36 @@ +from django.db import migrations, models +from django.utils.text import slugify +from django.utils.translation import gettext_lazy as _ + + +def populate_tag_slugs(apps, schema_editor): + Tag = apps.get_model('links', 'Tag') + for tag in Tag.objects.all(): + tag.slug = slugify(tag.name) + tag.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('links', '0032_remove_post_type'), + ] + + operations = [ + migrations.AddField( + model_name='tag', + name='slug', + field=models.SlugField(max_length=100, null=True, unique=True, verbose_name=_('Slug')), + ), + migrations.AddField( + model_name='tag', + name='description', + field=models.TextField(blank=True, verbose_name=_('Description')), + ), + migrations.RunPython(populate_tag_slugs, reverse_code=migrations.RunPython.noop), + migrations.AlterField( + model_name='tag', + name='slug', + field=models.SlugField(max_length=100, unique=True, verbose_name=_('Slug')), + ), + ] diff --git a/links/models.py b/links/models.py index ac8f1fa..74c567e 100644 --- a/links/models.py +++ b/links/models.py @@ -144,6 +144,8 @@ def generate_random_color(): class Tag(models.Model): name = models.CharField(_('Name'), max_length=50, unique=True) + slug = models.SlugField(_('Slug'), max_length=100, unique=True) + description = models.TextField(_('Description'), blank=True) created_at = models.DateTimeField(_('Created at'), auto_now_add=True) updated_at = models.DateTimeField(_('Updated at'), auto_now=True) @@ -156,7 +158,12 @@ class Tag(models.Model): return self.name def get_absolute_url(self): - return reverse('tag-detail', kwargs={'pk': self.pk}) + return reverse('tag-detail', kwargs={'slug': self.slug}) + + def save(self, *args, **kwargs): + if not self.slug: + self.slug = slugify(self.name) + super().save(*args, **kwargs) class Page(models.Model): class ProcessStatus(models.TextChoices): diff --git a/links/templates/links/tag_list.html b/links/templates/links/tag_list.html index e2f8e96..2f4ea04 100644 --- a/links/templates/links/tag_list.html +++ b/links/templates/links/tag_list.html @@ -26,7 +26,7 @@ {% endwith %} - + {% empty %}
{% trans "No tags found." %}