Dans mon views.py
J'attribue des valeurs avant d'enregistrer le formulaire. Je le faisais de la manière suivante:
projectForm.lat = session_results['lat']
projectForm.lng = session_results['lng']
Maintenant, comme la liste des variables est un peu longue, je voulais parcourir session_results
avec la boucle suivante (comme décrit par Adam ici ):
for k,v in session_results.iteritems():
projectForm[k] = v
Mais je reçois l'erreur 'Project' object does not support item assignment
pour la solution de boucle. J'ai du mal à comprendre pourquoi. Project
est la classe de modèle que j'utilise pour le ModelForm.
Merci de votre aide!
L'erreur semble claire: les objets du modèle ne prennent pas en charge l'affectation des éléments. MyModel.objects.latest('id')['foo'] = 'bar'
générera cette même erreur.
C'est un peu déroutant que votre instance de modèle s'appelle projectForm
...
Pour reproduire votre premier bloc de code dans une boucle, vous devez utiliser setattr
for k,v in session_results.iteritems():
setattr(projectForm, k, v)
Une autre façon serait d'ajouter la fonction __ getitem __, __ setitem __
def __getitem__(self, key):
return getattr(self, key)
Vous pouvez utiliser auto [clé] pour accéder maintenant.