Django pre_save signal - PullRequest
       5

Django pre_save signal

1 голос
/ 05 ноября 2011

Мне нужно было иметь возможность изменить данные модели до того, как они будут сохранены, поэтому я решил использовать обработчик 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, хотя я бы предпочел этого не делать.

1 Ответ

4 голосов
/ 05 ноября 2011

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

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

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

...