对象不支持项赋值错误

93 投票
3 回答
194532 浏览
提问于 2025-04-17 08:32

在我的 views.py 文件中,我在保存表单之前会先给一些值赋值。我以前是这样做的:

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

现在,由于变量的列表有点长,我想用一个循环来遍历 session_results,就像Adam在这里描述的那样:

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

但是我在使用循环的方案时遇到了错误,提示 'Project' object does not support item assignment。我不太明白为什么会这样。Project 是我用来创建ModelForm的模型类。

谢谢你的帮助!

3 个回答

0

在我的情况下,我想渲染数据,但不需要_content这个部分。不过,响应对象是不能编辑或删除的,所以我使用了变量,现在这个变量是一个字典,而不是Response对象,并且我去掉了_content这个属性。

data_obj = vars(r)
del data_obj['_content']
data_json = json.dumps(data_obj, indent=4, default=str)
return data_json

错误信息 SEO:

类型错误:'Response'对象不支持删除项目

类型错误:'Response'对象不支持赋值项目

34

另一种方法是添加 __getitem____setitem__ 这两个函数。

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

现在你可以用 self[key] 来访问数据了。

129

这个错误看起来很明显:模型对象不支持直接修改里面的内容。

比如说,MyModel.objects.latest('id')['foo'] = 'bar' 这样的写法也会出现同样的错误。

有点让人困惑的是,你的模型实例叫做 projectForm...

如果你想在循环中重复你第一段代码的功能,你需要使用 setattr 这个方法。

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

撰写回答