Seite 1 von 1

Modul importieren - Django

Verfasst: Donnerstag 24. April 2008, 12:29
von gatwanagu
Ich habe folgendes Problem: Die Klassen sind Django Models und ich kann die Hauptstruktur nicht ändern, da existierendes Framework. Das Problem ist aber m.E. generell -> in diesem Thread.

Modul A - a.py

Code: Alles auswählen

from B import CB-1, funcB
class CA-1(models.Model):
  ..... bla, bla ..

class CA-2(models.Model):
    ..... bla, bla ..
    def foo:
        xy=funcB
Modul B - b.py

Code: Alles auswählen

from A import CA-2
class CB-1(models.Model):
    ..... bla, bla ..
    x=models.ManyToManyField(A-2, ....

Beim Laden von A wir versucht, B-1 aus B zu laden. Diese wiederum benötigt A-1 aus A.

--> I

Code: Alles auswählen

mportError: cannot import name 
Das Plazieren von from B import CB-1, funcB zwischen die Klassen CA-1 und CA-2 führt zu nichts. Hat jemand eine Lösung, bzw gibt es da ein Muster oder sowas wie lazy loading.
Danke im Voraus
G

Verfasst: Donnerstag 24. April 2008, 12:49
von BlackJack
Generell solltest Du zirkuläre Importe einfach vermeiden. Wenn sich zwei Module gegenseitig so dringend brauchen, stellt sich die Frage warum sie überhaupt getrennt wurden.

Verfasst: Donnerstag 24. April 2008, 13:14
von gatwanagu
Wie geschrieben, es handelt sich um ein existierendes Framework und die Architektur ist außer meiner Kontrolle (würde wahrscheinlich riesiges Refaktoring nach sich ziehen).

Und dann ist die Frage ist eher, wieso sich die Klassen CA-1 und CA-2 im gleichen Modul befinden und ob man nicht hier eher aufbrechen kann.

Aber zurück zu meinem Originalproblem/Frage, gibt es außer vermeiden noch eine andere Lösung? Ich spreche das verwendete Wort 'Generell' an.