python - 如何使用 Django 在模型对象中分配项目?

标签 python django models

是否可以覆盖模型中的值? 我收到 '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/

相关文章:

python - 智能地打开 Windows 上已安装的应用程序

python - 如何向类 View 添加逻辑

android - 如何在包含的布局和多个模型中管理数据绑定(bind)?

Django:什么时候运行 makemigrations?

python - 一个 Hot Encoding 列中有多个标签

python - Codility计数课

javascript - 通过从 URL 获取百分比在 Django 中添加进度栏

django - django 应用程序的 apache mod_wsgi 基本身份验证

javascript - 将集合数组添加到 Backbone JS 中先前添加的集合中

python - 为什么从 Spark 写入 Vertica DB 比从 Spark 写入 MySQL 需要更长的时间?