Django 1.2: Как подключить сигнал предварительного сохранения к методу класса
Я пытаюсь определить метод "before_save" в некоторых классах в моем проекте django 1.2. У меня возникли проблемы с подключением сигнала к методу класса в models.py.
class MyClass(models.Model):
....
def before_save(self, sender, instance, *args, **kwargs):
self.test_field = "It worked"
Я попытался поставить pre_save.connect (before_save, sender= 'self') в самом "MyClass", но ничего не происходит.
Я также попытался положить его в нижней части models.py файл:
pre_save.connect(MyClass.before_save, sender=MyClass)
Я читал о подключении сигналов к методам класса здесь, но не могу разгадать код.
3 ответов
вместо того, чтобы использовать метод в MyClass, вы должны просто использовать функцию. Что-то вроде:
def before_save(sender, instance, *args, **kwargs):
instance.test_field = "It worked"
pre_save.connect(before_save, sender=MyClass)
пример работы с classmethod:
class MyClass(models.Model):
#....
@classmethod
def before_save(cls, sender, instance, *args, **kwargs):
instance.test_field = "It worked"
pre_save.connect(MyClass.before_save, sender=MyClass)
есть также отличный декоратор для автоматической обработки сигнальных соединений:http://djangosnippets.org/snippets/2124/
Я знаю, этот вопрос старый, но я искал ответ на это сегодня утром, так почему бы и нет. Кажется, из вашего кода Вы действительно хотели использовать метод экземпляра (из self
и назначение поля). DataGreed обратился к тому, как использовать его для метода класса, и использование сигналов с методами экземпляра довольно похоже.
class MyClass(models.Model)
test_field = models.Charfield(max_length=100)
def __init__(self, *args, **kwargs):
super(MyClass, self).__init__(*args, **kwargs)
pre_save.connect(self.before_save, sender=MyClass)
def before_save(self, sender, instance, *args, **kwargs):
self.test_field = "It worked"
Я не уверен, что это хорошая идея или нет, но это было полезно, когда мне нужен метод экземпляра, вызываемый объектом класса A перед сохранением из класса B.