Browse Source

slug generating updated

master
Mohsen Taba 1 month ago
parent
commit
d8737ed8ab
  1. 50
      apps/course/models/course.py

50
apps/course/models/course.py

@ -440,11 +440,53 @@ class Course(models.Model):
def save(self, *args, **kwargs):
self.title = format_multilingual_field(self.title)
if not self.slug or self.slug == []:
# Check if the title has changed (or if this is a new course)
title_changed = False
if not self.pk:
title_changed = True
else:
try:
self.slug = generate_language_slugs(self.title)
except Exception:
self.slug = []
original = self.__class__.objects.get(pk=self.pk)
title_changed = original.title != self.title
except self.__class__.DoesNotExist:
title_changed = True
if title_changed:
# Extract the English title
english_title = ""
if isinstance(self.title, list):
for tr in self.title:
if isinstance(tr, dict) and tr.get("language_code") == "en":
english_title = tr.get("title") or tr.get("text") or tr.get("value") or ""
break
# Fallback to any non-empty title if English title isn't found
if not english_title:
for tr in self.title:
if isinstance(tr, dict):
english_title = tr.get("title") or tr.get("text") or tr.get("value") or ""
if english_title:
break
base_slug = slugify(str(english_title or ""))
if not base_slug:
base_slug = "course"
val = base_slug
counter = 1
# Resolve global uniqueness collision (across other courses)
while True:
qs = self.__class__.objects.filter(slug__contains=[{"title": val}])
if self.pk:
qs = qs.exclude(pk=self.pk)
if qs.exists():
val = f"{base_slug}-{counter}"
counter += 1
else:
break
self.slug = [{"language_code": "en", "title": val}]
else:
self.slug = format_multilingual_field(self.slug)

Loading…
Cancel
Save