2009-10-09 14 views
23

Das scheint so einfach zu sein, also muss ich etwas verpassen. Ich möchte nur den Wert eines Feldes in meiner Modellinstanz nach Namen festlegen. Angenommen, ich habe:Wie wird das Django-Modellfeld nach Namen festgelegt?

Ich möchte den Wert von bar nach Name, nicht durch Zugriff auf das Feld. So etwas wie:

f.fields['bar'] = 'BAR" 

statt

f.bar = 'BAR' 

Ich versuche setattr habe, aber es bleibt nicht den Wert in der Datenbank. Ich habe auch versucht, durch _meta.fields zu gehen, aber habe verschiedene Fehler auf dem Weg bekommen.

Antwort

48

Wenn Sie den Wert über Setattr ändern, müssen Sie daran denken, das Modell nach der Änderung zu speichern. Ich wurde in der Vergangenheit gebissen, wo ich die Werte änderte, aber vergessen habe, das Modell zu speichern und das gleiche Ergebnis zu erhalten.

setattr(f, 'bar', 'BAR') 
f.save() 
+10

DOH! Ja, ich habe vergessen zu speichern. Ich werde mich jetzt in Schande verstecken ... –

13

Wir müssen möglicherweise mehr Code sehen.

setattr(f, 'bar', 'BAR') 

sollte funktionieren, wie dies Django intern tut.

Stellen Sie sicher, dass Sie auch "Speichern" aufrufen.

Verwandte Themen