我使用 Django 1.11 和 parler 插件进行翻译。每次我保存一个蛞蝓,我希望
- 测试它是否已经存在
- 截断蛞蝓
- 加号码
- 再次测试,如果新的蛞蝓存在等等
这样,我希望创建一个独特的储蓄。
模型.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)
此代码不起作用。无论如何,它总是在 slug 上添加一个数字,即使我输入了一个全新的 slug。