Modul importieren - Django

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gatwanagu
User
Beiträge: 2
Registriert: Montag 26. Februar 2007, 13:55
Wohnort: Wien

Donnerstag 24. April 2008, 12:29

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
BlackJack

Donnerstag 24. April 2008, 12:49

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.
gatwanagu
User
Beiträge: 2
Registriert: Montag 26. Februar 2007, 13:55
Wohnort: Wien

Donnerstag 24. April 2008, 13:14

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.
Antworten