Не удается определить язык для текста «Notebook 9 Pro», полученного из сигнала pre_save.Джанго 2.1, Питон 3.7 - PullRequest
0 голосов
/ 31 января 2019

Я хочу автоматически создать slug в admin с помощью pre_save signal (при заполнении имени модели), но у меня следующая ошибка: Не удается определить язык для данного текста «Notebook 9 Pro».

Я знаю, что можно сделать с prepopulated_fields, но мне нужен метод с сигналом pre_save.Thx.

models.py

class Product(models.Model):
    title = models.CharField(max_length=120)
    slug = models.SlugField(blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product_detail', kwargs={'product_slug': self.slug})

def pre_save_product_slug(sender, instance, *args, **kwargs):
    if not instance.slug:
        slug = slugify(translit(str(instance.title), reversed=True))
        instance.slug = slug

pre_save.connect(pre_save_product_slug, sender=Product)

Traceback

/media/m0nte-cr1st0/43338d5a-aa90-411c-a6d7-96964c46e415/m0nte-cr1st0/programming/django_projects/djangoshop/ecomapp/models.py in pre_save_product_slug
        slug = slugify(translit(str(instance.title), reversed=True)) ...
▶ Local vars
/media/m0nte-cr1st0/43338d5a-aa90-411c-a6d7-96964c46e415/m0nte-cr1st0/programming/django_projects/myvenv/lib/python3.5/site-packages/transliterate/utils.py in translit
        language_code = detect_language(value, fail_silently=False) ...
▶ Local vars
/media/m0nte-cr1st0/43338d5a-aa90-411c-a6d7-96964c46e415/m0nte-cr1st0/programming/django_projects/myvenv/lib/python3.5/site-packages/transliterate/utils.py in detect_language
            _("""Can't detect language for the text "%s" given.""") % text ...
▶ Local vars

Я получаю ошибку, если я 'м ввод английских букв.Если я ввожу русские символы, слаг не переводит их на английский.

Мне нужен слаг для формирования URL.

1 Ответ

0 голосов
/ 31 января 2019

Вы должны добавить язык в качестве второго параметра для функции translit:

from transliterate import translit


def pre_save_product_slug(sender, instance, *args, **kwargs):
    if not instance.slug:
        slug = slugify(translit(str(instance.title), 'ru', reversed=True))
        instance.slug = slug
...