2011-12-17 20 views
36

En mi views.py asigno valores antes de guardar el formulario. Solía ​​hacerlo de la siguiente manera:El objeto no admite el error de asignación de elemento

projectForm.lat = session_results['lat'] 
projectForm.lng = session_results['lng'] 

Ahora, desde la lista de variables tiene un poco larga, quería bucle sobre session_results con el siguiente bucle (como se describe por Adam here):

for k,v in session_results.iteritems(): 
    projectForm[k] = v 

Pero obtengo el error 'Project' object does not support item assignment para la solución de bucle. Tengo problemas para entender por qué. Project es la clase de modelo, que utilizo para ModelForm.

¡Gracias por tu ayuda!

Respuesta

46

El error parece claro: los objetos modelo no son compatibles con la asignación de elementos. MyModel.objects.latest('id')['foo'] = 'bar' lanzará el mismo error.

Es un poco confuso que la instancia modelo se llama projectForm ...

para reproducir el primer bloque de código en un bucle, es necesario utilizar setattr

for k,v in session_results.iteritems(): 
    setattr(projectForm, k, v) 
11

Otra forma sería la adición __getitem__, __setitem__ función

def __getitem__(self, key): 
    return getattr(self, key) 

Puede usar self [key] para acceder ahora.

Cuestiones relacionadas