django用表单更新对象

时间:2014-07-17 03:21:44

标签: django django-forms django-1.6

在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'}

如何用字典和表单更新对象?

2 个答案:

答案 0 :(得分:1)

使用最少代码执行此操作的最简单方法是使用基于类的UpdateView

以下是Django Docs的链接:

https://docs.djangoproject.com/en/dev/ref/class-based-views/generic-editing/#django.views.generic.edit.UpdateView

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__

中使用此功能