So beitreten Sie nicht relationale Modelle in Django 1.3 auf 2 Feldern
-
09-12-2019 - |
Frage
Ich habe 2 bestehende Modelle, die ich mitmachen muss, dass dies nicht relational ist (keine fremde Schlüssel).Diese wurden von anderen Entwicklern verfasst, die nicht von mir modifiziert werden können.
Hier ist eine kurze Beschreibung von ihnen:
Modellprozess
- Feld Dateiname
- Feldpfad
- Feld etwaselse
- Feldbalken
modelldienst
- Feld Dateiname
- Feldpfad
- feld serviceName
- feld foo
Ich muss an allen Instanzen dieser beiden Modelle auf dem Dateinamen- und Pfadsäulen teilnehmen.Ich habe bereits vorhandene Filter, die ich für jeden von ihnen anwenden muss, bevor dieses Join auftritt.
Beispiel:
a= Prozess.Objects.Filter (etwaselse= 231)
b= service.objects.filter (foo= 'abc')
result= a. filter (Dateiname= B.Filename, path= b.Path)
Lösung
Das ist saugt, aber Ihre beste Wette ist, alle Modelle eines Typs zu iterieren, und ergeben Abfragen, um Ihre beigetretenen Modelle für den anderen Typ zu erhalten.
Die andere Alternative besteht darin, eine rohe SQL-Abfrage auszuführen, um diese Verbindungen auszuführen, und die IDs für jedes Modellobjekt abzurufen und dann jedes zusammengefügte Paar abzurufen.Effizienter zur Laufzeit, aber es muss manuell aufrechterhalten werden, wenn sich Ihr Schema entwickelt.