是否可以覆盖模型中的值? 我收到 'MyModel' 对象不支持项目分配。
my_model = MyModel.objects.get(id=1)
print my_model.title
if my_model.is_changed:
my_model['title'] = 'something' # 'MyModel' object does not support item assignment
params = {
'my_model': my_model,
...
}
return render(request, 'template.html', params)
最佳答案
模型是对象,不是字典。直接在它们上设置属性:
if my_model.is_changed:
my_model.title = 'something'
或者,如果属性名是动态的,使用setattr
:
attr_name = 'title' # in practice this would be more complex
if my_model.is_changed:
setattr(my_model, attr_name, 'something')
这会更改模型的内存副本,但不会更改数据库 - 因为您的属性必须是一个字段并且您会调用 save
my_model
上的方法。如果您只想更改模板在其上下文中接收的内容,则不需要这样做,但只是为了完整起见:
if my_model.is_changed:
my_model.title = 'something'
my_model.save()
字典是可变的,如果你真的有字典的话:
mydict = {'title': 'foo'}
# legal
mydict['title'] = 'something'
但并非一切都是字典。
关于python - 如何使用 Django 在模型对象中分配项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18759476/