slugify service

This commit is contained in:
Tobias Brunner 2025-01-27 17:00:56 +01:00
parent 483f076d1a
commit 273e417da2
No known key found for this signature in database
8 changed files with 79 additions and 15 deletions

View file

@ -1,5 +1,6 @@
from django.db import models
from django.core.exceptions import ValidationError
from django.urls import reverse
from django.utils.text import slugify
from django_prose_editor.fields import ProseEditorField
@ -89,6 +90,7 @@ class ServiceLevel(models.Model):
class Service(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=250, unique=True)
description = ProseEditorField()
cloud_provider = models.ForeignKey(CloudProvider, on_delete=models.CASCADE)
service_level = models.ForeignKey(ServiceLevel, on_delete=models.CASCADE)
@ -108,6 +110,22 @@ class Service(models.Model):
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
base_slug = f"{self.name}-{self.cloud_provider.name}"
self.slug = slugify(base_slug)
# If slug exists, append number
counter = 1
while Service.objects.filter(slug=self.slug).exists():
self.slug = f"{slugify(base_slug)}-{counter}"
counter += 1
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("services:service_detail", kwargs={"slug": self.slug})
class Lead(models.Model):
service = models.ForeignKey(Service, on_delete=models.CASCADE)