@Animkim
Питон вокруг меня

Сигнал, где ошибка?

from django.db.models.signals import post_save

class Category(models.Model):
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
    title = models.CharField(max_length=50)
    slug = models.SlugField(max_length=70, blank=True)

def set_caregory_slug(sender, instance, *args, **kwargs):
    from pytils import translit
    instance.slug = translit.slugify(instance.title.strip())

post_save.connect(set_caregory_slug, sender=Category)


В консоли shell всё срабатывает, сигнал тоже срабатывает, но почему-то не записывает slug. У меня тут в коде видно ошибку?
  • Вопрос задан
  • 247 просмотров
Решения вопроса 2
crazyzubr
@crazyzubr
Python backend-developer
Логичнее будет использовать сигнал pre_save
Ответ написан
Комментировать
Сигнал post_save выполняется после сохранения объекта. Вы сохранили объект, а потом записали ему свойство instance.slug. Повторного сохранения не производится. И не должно производиться, на самом деле, - иначе у вас получится бесконечная рекурсия. Попробуйте сигнал pre_save, тогда после вашего обработчика объект будет сохранён и вуаля.

P. S. Если модель Category - ваша, то можно напрямую переопределить def save(self, *args, **kwargs) в ней.
P. P. S. Чтоб организовать иерархию, можно использовать django-mptt.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы