Angenommen A
und B
django Model sind, wo A
ein Fremdschlüsselfeld B
hat:django: Zuordnung von Fremdschlüsseln vor Zielmodell
a = A()
b = B()
a.my_b = b
b.save()
a.save()
Überraschenderweise a
mit null
im my_b
Fremdschlüsselfeld gespeichert wird, . Wenn Sie a.my_b
vor oder nach dem Speichern überprüft auf die b
Instanz verweisen, jedoch scheint es, dass django die Fremdschlüssel-ID selbst auf a.my_b = b
Zuweisung bewertet und nicht auf a.save()
. In komplexen Systemen und fließt es schwierig sein kann, die Reihenfolge der Befehle zu ändern, einfach so b
speichern, bevor es zu a
Zuweisung unpraktisch sein könnte ...
die unglaubliche Aussage a.my_b=a.my_b
zwischen dem Speicherbefehl Werk hinzufügen, aber mir scheint, ein schrecklicher Workaround.
Gibt es eine Möglichkeit, Django so zu konfigurieren, dass beim Speichern von Modellinstanzen Fremdschlüssel erneut ausgewertet werden?
Gibt es einen anderen Ansatz, der dieses Problem möglicherweise lösen könnte?
Dies hat mich gebissen, wenn ich versucht habe, Modellinstanzen dynamisch aus verschachtelten JSON-Daten zu erstellen. In meinem Fall konnte ich die Instanzen nicht speichern, bevor alle Felder bearbeitet wurden (was dazu führte, dass die zugehörigen Instanzen erstellt wurden), so dass ich vor der Zuweisung nicht speichern konnte. Stattdessen habe ich eine Liste von Funktionen erstellt, die aufgerufen werden, wenn die Instanzen alle verdrahtet sind. Zusätzlich zu der Speichermethode jeder Instanz habe ich eine 'partielle (setattr, name, value) 'hinzugefügt, so dass die zweifelhaften Zuordnungen in die Warteschlange gestellt wurden, bis die zugehörige Instanz gespeichert wurde. Leider sieht es nicht so aus, als würde # 8892 jemals behoben werden, aber zumindest werden sie einen Fehler hinzufügen. –
@pluma könnten Sie Ihre Lösung erweitern? Ich habe das gleiche Problem. – bryanph