2009-10-09 16 views
23

Parece que debería ser muy simple, así que me falta algo. Solo quiero establecer el valor de un campo en mi instancia modelo por nombre. Decir que tengo:¿Cómo se establece el campo modelo de django por su nombre?

class Foo(Model): 
    bar = CharField() 

f = Foo() 

quiero fijar el valor de la barra por su nombre, no accediendo al campo. Así que algo como:

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

en lugar de

f.bar = 'BAR' 

He intentado setattr pero no se conserva el valor en la base de datos. También probé a través de _meta.fields pero obtuve varios errores en el camino.

Respuesta

48

Si modifica el valor mediante setattr, debe recordar guardar el modelo después de modificarlo. Me mordieron en el pasado cuando cambié los valores, pero olvidé guardar el modelo y obtuve el mismo resultado.

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

DOH! Sí, me olvidé de guardar. Voy a esconderme en la vergüenza ahora ... –

13

Es posible que tengamos que ver más código.

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

debería funcionar así es como lo hace Django internamente.

Asegúrese de llamar también 'guardar'.

Cuestiones relacionadas