2016-06-13 1 views
0

Ich bin ein Wörterbuch mit Schlüssel als Modellfelder in django Senden und wollen, dass sie retten eine for Schleife wie folgt ausgeführt werden:speichern die Werte aus Wörterbuch in django Feldern eine for-Schleife laufen

for key in dictionary: 
    object.key = dictionary[key] 
    object.save() 

Hier die Schlüssel sind die genauen Namen von Modellfeldern, aber es wird nicht gespeichert.

Wenn beispielsweise einer der Schlüssel about lautet, wird versucht, den Wert in object.key statt object.about zu speichern.

Was mache ich falsch? Wie soll ich die for Schleife ausführen, um die Werte im Objekt zu speichern?

+0

Können Sie ein Beispiel für "Wörterbuch" geben? – Gocht

Antwort

1

Sie setzen die Werte für Ihr Objekt nicht richtig ein. Sie können setattr, können Sie die Werte im Wörterbuch zu dem entsprechenden Objektattribut

for key in dictionary: 
    setattr(object, key, dictionary[key]) 
object.save() 

save sollte, nachdem alle Attribute gesetzt wurden im Objekt

+0

Es hat gut funktioniert und ich werde es akzeptieren. Aber es wäre toll, wenn Sie eine kleine Erklärung dafür geben könnten, warum ich es so gemacht habe, dass es nicht funktioniert hat und warum setattr arbeitet. Es könnte eine große Hilfe sein. – sprksh

+1

Ein Beispiel. Wenn 'key = 'über'', nimmt' settattr' den Wert von 'dictionary [' über ']' und setzt ihn auf 'object.about'. Diese Aktion wird für alle Schlüssel im Wörterbuch wiederholt. Nach der Schleife (nicht in der Schleife) wird 'save' aufgerufen, um das Speichern jedes Mal zu verhindern, wenn ein Attribut gesetzt wird. Die von Ihnen gewählte Methode versucht, nur 'object.key' auf alle Werte im Wörterbuch zu setzen und nur der letzte Wert wird ausgewählt. –

4

Sie verwenden können, ein Django-Modell instanziiert aufgerufen werden, indem seine Attribute an den Konstruktor als kwargs, zB:

model = Model(attr1=value1, attr2=value2) 

Dies bedeutet, dass Sie ein Modell, das auf Ihrem Wörterbuch wie folgt instanziieren:

model = Model(**dictionary) 
Verwandte Themen