87

In my views.py I assign values before saving the form. I used to do it the following way:

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

Now, since the list of variables got a bit long, I wanted to loop over session_results with the following loop (as described by Adam here):

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

But I get the error 'Project' object does not support item assignment for the loop solution. I have trouble to understand why. Project is the model class, which I use for the ModelForm.

Thank you for your help!

Community
  • 1
  • 1
neurix
  • 4,126
  • 6
  • 46
  • 71

2 Answers2

125

The error seems clear: model objects do not support item assignment. MyModel.objects.latest('id')['foo'] = 'bar' will throw this same error.

It's a little confusing that your model instance is called projectForm...

To reproduce your first block of code in a loop, you need to use setattr

for k,v in session_results.iteritems():
    setattr(projectForm, k, v)
Yuji 'Tomita' Tomita
  • 115,817
  • 29
  • 282
  • 245
31

Another way would be adding __getitem__, __setitem__ function

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

You can use self[key] to access now.

dlmeetei
  • 9,905
  • 3
  • 31
  • 38
Ivan Wang
  • 460
  • 4
  • 3