W dokumentacji dla Django
, określa, że models.py
jest dobrym miejscem, aby znaleźć funkcje zwrotne dla sygnałów (post_save
, pre_save
, etc).Jak odwołać sygnały poza models.py
Where should this code live?
You can put signal handling and registration code anywhere you like. However, you'll need to make sure that the module it's in gets imported early on so that the signal handling gets registered before any signals need to be sent. This makes your app's models.py a good place to put registration of signal handlers.
source: https://docs.djangoproject.com/en/dev/topics/signals/
Mam jednak znaczną ilość logiki biznesowej, który opiera się na sygnałach i to staje się wyzwaniem, aby wyświetlić je w tym samym pliku, co wszystkich moich modeli.
Chciałbym przenieść je do innego pliku, ale nie wiem, jak i gdzie mogę się do nich odwoływać.
A zatem, biorąc pod uwagę następującą strukturę plików, czy mógłbyś podać przykład, w jaki sposób mogę odwołać się do pliku pomocniczego (lub trzeciorzędnego) zawierającego odpowiednie sygnały?
# models.py located in /myapp/some_installed_app/
from django import needed.modules
... # some reference to signals.py?
class SomeModel()
pass
# signals.py located in /myapp/some_installed_app/
from django import needed.things
...
def somefun(sender,**kwargs)
pass
post_save.connect(somefun, sender=SomeModel)
'z importu sygnałów *' w twoim 'models.py' nie działa? – favoretti
@favoretti Spróbuję teraz. –
Jeśli importujesz sygnały w models.py i modelach w pliku signal.py, może zaistnieć potrzeba użycia określonych instrukcji importu, aby uniknąć importu cyklicznego: 'sygnałów importu' i' modeli importowania', w przeciwieństwie do używania '*' lub i członkowie tego modułu. – jdi