Zirkuläre Modellimporte in Django-Apps vermeiden

8

Ich habe ein Django-Projekt mit 2 Apps wie folgt:

%Vor%

AKTUALISIERUNG DER FUNKTIONSSTELLE

Ich habe eine Methode für ein anderes Modell in items.models , das alle Elemente mit einer Gruppe von Tags enthält.

Die resultierende Abfrage ist wie folgt:

%Vor%

Diese Methode verwendet das Item -Modell sowie das Tag -Modell, was in Ordnung ist, da Tag in die Element-App importiert wird.

Ich möchte jedoch Zugriff auf diese Methode in der Tags-App haben, aber dies würde zu einem zirkulären Import führen.

Zur Zeit ist es meine Problemumgehung, alle Elemente mit einer Reihe von Tags in der Tags-App zu erhalten, um einen Schnittpunkt für die umgekehrte Beziehung im Feld "Viele zu viele" zu setzen.

%Vor%

Dies führt zu mehreren weiteren Abfragen und einem Schnittpunkt. Gibt es eine Möglichkeit, etwas wie Item.objects.filter(tags=t1).filter(tags=t2)... aus dem Tag-Modell in der Tags-App zu machen?

Ich konnte das umgehen, indem ich contenttypes verwendete, um das Item -Modell dazu zu bringen, dieselbe Abfrage zu erstellen. Ist das akzeptabel oder gibt es eine bessere Möglichkeit, diesen Code zu organisieren?

    
jkeesh 03.08.2011, 07:29
quelle

1 Antwort

23

Wenn Sie Modelle mit Fremdschlüsseln definieren, können Sie das folgende Format verwenden:

%Vor%

Das bedeutet, dass Sie die Tag-Klasse nicht importieren müssen, sondern nur die Tags-App installiert haben.

Dann können Sie eine Funktion an einem anderen Ort speichern, der sowohl Tag als auch Item importieren kann und sich nicht um zirkuläre Importe kümmern muss.

    
Matthew Schinckel 03.08.2011, 08:09
quelle