Django: Gibt es eine Möglichkeit, das "Through" -Modell in einem ManyToManyField in einer anderen App als das Modell zu haben, das das ManyToManyField enthält?

8

Sagen wir, ich habe zwei Django-Apps:

  • Wettbewerbe - die mit Wettbewerbsdaten umgehen
  • Einträge - die für die Teilnahme von Wettbewerbern an Wettbewerben zuständig sind

In der Wettkampf-App habe ich ein Modell, das einen Abschnitt eines Wettbewerbs darstellt:

%Vor%

Ich möchte das Entry-Modell in die App eintragen:

%Vor%

Wie löse ich die Anweisungen von ... Import ..., damit sie funktionieren? Wenn ich import-Anweisungen wie from entries.models import Entry einfüge, bekomme ich die Modelle aus diesen Apps von syncdb ignoriert (weil die Importe zirkulär sind) oder wenn ich eine oder beide lösche, bekomme ich Validierungsfehler:

  

Fehler: Ein oder mehrere Modelle nicht   validiere: entries.entry: 'division'   hat eine Beziehung mit der Modellabteilung,   welches entweder nicht installiert wurde oder   ist abstrakt. wettbewerbe.division:   "Teilnehmer" gibt eine m2m an   Beziehung durch Modelleintrag, die   wurde nicht installiert

Ich verstehe, warum das passiert, aber ich habe keine Ahnung, wie ich das ändern soll, damit es funktioniert (ohne das Entry-Modell in die Gewinnspiel-App zu verschieben, was ich wirklich nicht tun möchte).

>     
Monika Sulik 28.12.2009, 16:50
quelle

2 Antworten

16

Es scheint als hätte ich eine Antwort gefunden, die konsequenter funktioniert:)

Die Django-Dokumentation zur ForeignKey-Klasse lautet:

  

Um auf Modelle zu verweisen, die in einem anderen definiert sind   Anwendung können Sie explizit   Geben Sie ein Modell mit dem vollständigen Namen an   Anwendungskennzeichnung. Zum Beispiel, wenn der   Das obige Herstellermodell ist in definiert   eine andere Anwendung namens Produktion,   Sie müssten verwenden:

%Vor%
  

Diese Art von Referenz kann nützlich sein   beim Auflösen des zirkulären Imports   Abhängigkeiten zwischen zwei Anwendungen.

    
Monika Sulik 04.01.2010, 15:04
quelle
5

manchmal hilft django.db.models.get_model , zirkuläre Importe zu umgehen. Versuchen Sie in Ihrem Beispiel, Entry normal zu importieren und ändern Sie die division FK-Definition in Entry folgendermaßen:

%Vor%     
Benjamin Wohlwend 28.12.2009 17:01
quelle