Я использую Django 1.11 и плагин parler для перевода.Каждый раз, когда я сохраняю слаг, я хочу
- проверить, если он уже существует
- обрезать слаг
- добавить номер
- проверить снова,если новый слаг существует и так далее
Таким образом, я хочу создать уникальный слаг при сохранении.
models.py:
from parler.models import TranslatableModel
from django.utils.translation import gettext_lazy as _
class Event(TranslatableModel):
translations = TranslatedFields(
event_title=models.CharField(_("event title"), max_length=512),
slug=models.SlugField(_("slug"), help_text=_("Used in the URL of the event page.")),
description=RichTextUploadingField(blank=True),
meta={'unique_together': (('language_code', 'slug'),)},
)
def save_translation(self, translation, *args, **kwargs):
"""Create a unique slug of 45 Characters + a dash and 4 digits."""
translation.slug = translation.slug[:50]
if Event.objects.active_translations(slug=translation.slug).exists():
# This is true on the first test for no apparent reason.
i = 0
while Event.objects.active_translations(slug=translation.slug).exists():
translation.slug = translation.slug[:44]+'-'+str(i)
i += 1
super(Event, self).save_translation(translation, *args, **kwargs)
Thisкод не работает.Он всегда добавляет число к слагу, несмотря ни на что, даже если я ввожу совершенно новый слаг.