对象不支持项目分配错误

时间:2011-12-17 03:27:26

标签: python django loops dictionary

在我的views.py中,我在保存表单之前指定了值。我曾经这样做过:

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

现在,由于变量列表有点长,我想用以下循环遍历session_results(如Adam here所述):

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

但是我得到了循环解决方案的错误'Project' object does not support item assignment。我很难理解为什么。 Project是模型类,我将其用于ModelForm。

感谢您的帮助!

2 个答案:

答案 0 :(得分:61)

错误似乎很明显:模型对象不支持项目分配。 MyModel.objects.latest('id')['foo'] = 'bar'会抛出同样的错误。

您的模型实例被称为projectForm ...

,这有点令人困惑

要在循环中重现第一个代码块,您需要使用setattr

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

答案 1 :(得分:18)

另一种方法是添加 __ getitem __ __ setitem __ 功能

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

您现在可以使用自[密钥]进行访问。