Was ich habe eine Liste von Modellobjekten, die ich nicht bulk_create
ausgeführt haben auf:Django Kreuzung von nicht commited Modellobjekte und engagierten Modellobjekte
objs = [Model(id=1, field=foo), Model(id=2, field=bar)]
Was ich möchte, ist mit Model.objects.all()
intersect objs
zu tun und nur diejenigen Objekte zurückgeben, die noch nicht in der Datenbank sind (basierend auf dem Wert field
).
Zum Beispiel, wenn meine Datenbank ist:
[Model(id=3, field=foo)]
Dann sollte die resultierenden objs
sein:
objs = [Model(id=1, field=bar)]
so etwas wie dies möglich ist?
Edit:
So ein bisschen eine weitere Erklärung:
Was ich tue, das ich einen Import-Befehl haben, dass ich versuche, eine --append
Flagge haben enthalten.
Ohne das Flag lösche ich die Tabellen und starte neu.
Mit der Flagge möchte ich eine große Anzahl von Objekten in großen Mengen erstellen (einzelne Erstellung ist viel langsamer - ich habe überprüft), und ich möchte keine Objekte mit den gleichen Feldwerten aber anderen IDs haben.
Ich habe schon versucht, Duplikate nach dem Einfügen zu filtern, aber es ist ziemlich langsam und ich wollte diesen Ansatz testen, um zu sehen, ob es schneller ist.
Die Objekte werden aus CSV-Dateien gelesen, und es ist schneller, eine Liste von Model
und dann bulk_create
zu erstellen, anstatt create
in jeder Zeile auszuführen.
Klingt wie ein [XY-Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Was versuchst du eigentlich? – schwobaseggl
Sind Sie ganz sicher, dass Sie nicht 'objs = [Model (id = 2, field = bar)]' wollen? – BorrajaX
Es sieht für mich aus, dass Sie nach einer 'get_or_create'-Funktion suchen. –