Estoy tratando de agregar una señal post_save en mi aplicación Django y me encuentro con un problema de importación circular.
helpers.py
from tracker.models import Record def get_account_id(name): return name + '123' models.py
from helpers import get_account_id class Record(models.Model): id = models.AutoField(primary_key=True) created_at = models.DateTimeField(auto_now_add=True) name = models.CharField(max_length=120, blank=True) matched_account_id = models.CharField(max_length=120, unique=False, blank=True) def find_matched_account(sender, instance, *args, **kwargs): instance.matched_account_id = get_account_id(instance.name) instance.save() pre_save.connect(find_matched_account, sender=Record) Obviamente, esto es una simplificación, pero resume el problema con el que me estoy encontrando. Podría mover el código de los helpers a los models , pero preferiría almacenar cosas como esta en los helpers porque terminaré usándolo en otros lugares.
Mueva la importación a la función.
editar: envió esto un poco prematuramente: P
Cuando sus importaciones están en la parte superior de un archivo, se ejecutan tan pronto como se importa ese archivo. Eso provoca este tipo de error.
Puede limitar sus importaciones al alcance de una función para evitar este problema.
Cuando se encuentre con este problema, al menos debe verificar que su arquitectura sea realmente adecuada. A veces (pero ciertamente no siempre) es una indicación de que su arquitectura puede mejorarse.
Encuentro que generalmente puede mover la función del modelo a los ayudantes y hacer que el primer argumento de la función sea una instancia del modelo. De esa manera, solo tendrás un ayudante importando un ayudante.
(segunda edición: código de ejemplo eliminado, que no tenía sentido)