from autoslug import AutoSlugField # AutoSlugField нужно дополнительно установить (pip install django-autoslug) - добавляет поля slug
from uuslug import uuslug # нужно дополнительно установить(pip install django-uuslug) - переводит URL-адреса на латиницу
class ModelZavet(models.Model):
...
mz_slug = AutoSlugField('URL', max_length=70, db_index=True, unique=True, populate_form=lambda instance: instance.mz_name, slugify=lambda value: value.replace(' ', '-'))
...
def save(self, *args, **kwargs):
self.mz_slug = uuslug(self.mz_slug, instance=self)
super(ModelZavet, self).save(*args, **kwargs)
# populate_form -> берёт заголовок названия
# slugify=lambda value: value.replace(' ', '-') -> заменяет пробелы на тире
! Для того чтобы не возникло проблем при выполнении миграции -> заменить lambda-функции обычными функциями и написать их перед моделью
def instance_ mz_slug(instance):
return instance.mz_name
def slugify_value(value):
return value.replace(' ', '-')
#должно получится так:
class ModelZavet(models.Model):
...
mz_slug = AutoSlugField('URL', max_length=70, db_index=True, unique=True, verbose_name='URLs',
populate_from= instance_ mz_slug, slugify=slugify_value)
...
! Если в admin.py указано
prepopulated_fields = {'mz_slug': ('mz_name',)} -> нужно удалить или закомментировать
! Больше нигде ничего указывать не надо