在django 1.6中,我有一个带
的模型class Person(models.Model):
name = models.CharField(max_length=200)
lastname = name = models.CharField(max_length=200)
和表格
class EventPerson(ModelForm):
class Meta:
model = Event
fields = ['name', 'lastname']
如果我用
创建一个对象p = Person.object.create(name='John')
我有一本字典
d = {'lastname':'Smith'}
如何用字典和表单更新对象?
答案 0 :(得分:1)
使用最少代码执行此操作的最简单方法是使用基于类的UpdateView
。
以下是Django Docs的链接:
views.py 代码示例为:
from django.views.generic.edit import UpdateView
from myapp.models import Person
class PersonUpdate(UpdateView):
model = Person
fields = ['name', 'lastname']
template_name_suffix = '_update_form'
然后只需在模板中添加表单即可。默认情况下,模板名称为person_update_form.html
模板代码如下所示:
<form action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
这也会自动使用您尝试更新的Person
对象中的任何初始表单数据填充表单。
修改强>
根据您想要的对象的dict更新对象:
获取对象
person = Person.object.get(name='John')
更新
# if this is the new lastname
d = {'lastname':'Smith'}
# then access the dict and update it
person.lastname = d['lastname']
保存对象
person.save()
如果您不使用模板,则无需使用该表单。
答案 1 :(得分:1)
如果您的模型没有继承属性,您可以使用:
p.__dict__.update(d)
p.save()
您可以在表格__init__