Django - как связать все модели с получателями post_save? - PullRequest
0 голосов
/ 20 сентября 2019

Я работаю над сценарием, который находит все сигналы Django pre_save и post_save и комментарии, перезаписанные save методами, поэтому программист знает обо всех сигналах, влияющих на рабочий процесс.

Например

Есть два приемника:

@receiver(pre_save, sender=MyModel)
def sig_mymodel_pre_save(instance, sender, **kwargs):
   ...

@receiver(post_save, sender=MyModel)
def sig_mymodel_post_save(instance, sender, created, **kwargs):
   ...

И модель MyModel :

class MyModel(..):
    ...

    def save(self,*args,**kwargs):
        ...
        super().save(...)
        ....

Я хочу, чтобы скрипт изменил MyModel код, чтобы он выглядел следующим образом:

class MyModel(..):
    ...

    def save(self,*args,**kwargs):
        ...
        # SIGNAL pre_save | myapp.models.sig_mymodel_pre_save
        super().save(...)
        # SIGNAL post_save | myapp.models.sig_mymodel_post_save
        ....

Итак, первое, что я собираюсь сделать, это перечислить все receivers из post_save и pre_save сигналы:

def get_signals() -> {}:
    result = {}
    for signal in [pre_save, post_save]:
        result[signal] = signal.receivers
    return result

def comment_signals_to_save_methods():

    for signal, receivers in get_receivers():
        for receiver in receivers:
             models = ???

И вот в чем проблема - я не могу получить models для receiver.Нет такого метода или атрибута.

Вы знаете, как это сделать?

...