django: зарегистрировать слушателей в models.py и задачах циклического импорта - PullRequest
0 голосов
/ 28 февраля 2012

Я работаю над некоторыми прослушивателями сигналов, которые создают записи из модели.А в django docs сказано, что слушатели должны быть зарегистрированы в models.py.Поскольку слушатели довольно большие в строках, я бы хотел отделить их логику от файла models.py.Похоже, это уже вызывает проблемы с циклическим импортом в моем случае.Каков наилучший способ избежать этой проблемы при сохранении разделенных кодов?

в настоящее время это выглядит так: models.py

class foo(models.Model):
    #model definition

import listeners

listeners.py

import models
def fun(sender,**kwargs):
    bar=models.foo()
    #listener logics....

from AnotherApp.models import AnotherModel
post_save.connect(fun,sender=AnotherModel)

1 Ответ

1 голос
/ 28 февраля 2012

Вот забавный взлом:

from django.db.models import get_model

import models

def fun(sender,**kwargs):
    # still better than doing the import in the function isn't it ...
    if sender != get_model('anotherapp', 'anothermodel'):
        return

    bar=models.foo()
    #listener logics....

post_save.connect(fun)

И это может даже сработать, но я не могу сказать:

post_save.connect(fun, sender=get_model('anotherapp', 'anothermodel'))

Кстати, есть лучшие имена, чем слушатели: приемник - это имя Джанго , а slot - это общее имя .

В любом случаеЯ не могу быть более полезным, потому что Я не могу воспроизвести вашу проблему с кодом, который вы вставили .Пожалуйста, убедитесь, что вы вставили код, который может воспроизвести вашу проблему.

...