Отправляет ли Django сигнал pre_init / post_init, когда экземпляры загружаются с помощью QuerySet? - PullRequest
2 голосов
/ 20 марта 2012

Мне нужно вызывать метод экземпляра для каждого экземпляра, загруженного набором запросов.Могу ли я использовать для этого сигналы pre_init / post_init?

1 Ответ

8 голосов
/ 20 марта 2012

Да, pre_init / post_init отправляется, даже когда экземпляры создаются из наборов запросов.

Не верьте мне на слово, попробуйте, например:

def pre_init_callback(sender, **kwargs):
    print 'pre_init', sender, kwargs
pre_init.connect(pre_init_callback)

def post_init_callback(sender, **kwargs):
    print 'post_init', sender, kwargs
post_init.connect(post_init_callback)

Выводит что-то вроде:

In [5]: list(Profile.objects.all())
pre_init <class 'testapp.models.Profile'> {'signal': <django.dispatch.dispatcher.Signal object at 0x15e6450>, 'args': (1, False, None), 'kwargs': {}}
post_init <class 'testapp.models.Profile'> {'instance': <Profile: Profile object>, 'signal': <django.dispatch.dispatcher.Signal object at 0x15e6490>}
pre_init <class 'testapp.models.Profile'> {'signal': <django.dispatch.dispatcher.Signal object at 0x15e6450>, 'args': (2, False, None), 'kwargs': {}}
post_init <class 'testapp.models.Profile'> {'instance': <Profile: Profile object>, 'signal': <django.dispatch.dispatcher.Signal object at 0x15e6490>}
Out[5]: [<Profile: Profile object>, <Profile: Profile object>]
...