Сигнал pre_save Django

Мне нужно было иметь возможность изменить данные моей модели перед ее сохранением, поэтому я решил использовать обработчик pre_save как лучший вариант:

@receiver(pre_save, weak = False)
def pre_category_save(sender, **kwargs):
    if kwargs['instance'].tags is None:
        kwargs['instance'].tags = kwargs['instance'].__unicode__().replace(' -> ', ', ')

Под ключом экземпляра kwargs я ожидал найти фактический экземпляр модели, который я сохраняю, но вместо этого я получил объект класса LogEntry - вот причина, по которой моя функция не возвращает эту ошибку: объект «LogEntry» не имеет атрибута «теги» . Итак, как я могу это исправить? Проверка наличия у экземпляра тегов атрибутов не является решением, потому что я всегда получаю только объект logentry. В конечном итоге я могу перегрузить метод Model.save, хотя я бы не хотел этого делать.


person marek    schedule 05.11.2011    source источник


Ответы (1)


Вы не указали класс модели, который принимается этим сигналом, поэтому он сам подключился к всем сохранениям моделей, включая LogEntry. Вместо этого сделайте следующее:

 @receiver(pre_save, sender=MyModel, weak=False)
 ...

См. документацию.

person Daniel Roseman    schedule 05.11.2011
comment
Извините, это должно было быть sender. - person Daniel Roseman; 05.11.2011