如何使用字典保存django对象?

时间:2010-04-23 07:03:16

标签: django django-models

有没有办法可以使用字典保存模型

例如 这工作正常,

p1 = Poll.objects.get(pk=1)

p1.name = 'poll2'
p1.descirption = 'poll2 description'

p1.save()

但如果我有{'name'字典:'poll2','description:'poll2 description'}

是否有一种简单的方法可以将此类词典直接保存到民意调查

4 个答案:

答案 0 :(得分:22)

如果你是从头开始创建一个新对象,那么drmegahertz的解决方案是有效的。但是,在您的示例中,您似乎想要更新现有对象。您可以通过访问每个Python对象具有的__dict__属性来执行此操作:

p1.__dict__.update(mydatadict)
p1.save()

答案 1 :(得分:20)

您可以打开字典,使其键和值像命名参数一样:

data_dict = {'name': 'foo', 'description': 'bar'}

 # This becomes Poll(name='foo', description='bar')
 p = Poll(**data_dict)
 ...
 p.save()

答案 2 :(得分:0)

我发现只有此变体对我有效。 同样在这种情况下,所有信号都会被正确触发

CMD [ "sh", "-c", "java -Dserver.port=$PORT -Xmx300m -Xss512k -Dfile.encoding=UTF-8 -Dspring.profiles.active=prod -Djava.security.egd=file:/dev/./urandom -jar /opt/application.jar" ]

答案 3 :(得分:0)

您可以通过在过滤器集上使用 update 来实现这一点:

例如:

data = { 'name': 'poll2', 'description: 'poll2 description' }
p1 = Poll.objects.filter(pk=1)
p1.update(**data)

注意事项:

  • 请注意,.update 不会触发信号
  • 您可能需要在那里进行检查以确保在更新之前只返回 1 个结果(只是为了安全起见)。例如:if p1.count() == 1: ...
  • 这可能是使用 __ 方法(例如 __dict__.
  • )的更好选择