-1

I want to automatically create slug in admin with helping by pre_save signal (when filling in the model's name), but I have next error: Can't detect language for the text "Notebook 9 Pro" given.

I know, that can make with prepopulated_fields, but i need method with pre_save signal. 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

I'm getting error if I'm input english chars. If I'm inputting russian chars , slug doesn't translating their to english.

I need a slug to form an url.

Nikita Tonkoskur
  • 1,440
  • 1
  • 16
  • 28

1 Answers1

0

You should add language as a second parameter to translit function:

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
Nikita Tonkoskur
  • 1,440
  • 1
  • 16
  • 28