Django:使用ModelForm编辑现有的数据库条目 [英] Django: using ModelForm to edit existing database entry

查看:154
本文介绍了Django:使用ModelForm编辑现有的数据库条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个ModelForm类,以便能够创建和编辑数据库条目。创建新条目工作良好,但是,我不知道如何使用ModelForms来编辑/更新现有条目。我可以使用数据库实例来实例化一个ModelForm:

  form = MyModelForm(instance = MyModel.objects.get(pk = some_id ))

但是,当我将其传递给模板并编辑字段,然后尝试保存,我创建一个新的数据库条目,而不是更新some_id?



Edit1:
这是我的观点



$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $


如果form.is_valid():
editedEntry = form.save()#< - 创建新条目,而不是更新


解决方案

记住你还需要使用实例参数在POST上实例化。

  instance = MyModel.objects.get(whatever)
if request.method ==POST :
form = MyModelForm(request.POST,instance = instance)
...

else:
form = MyModelForm(instance = instance)


I have created a ModelForm class to be able to create and edit database entries. Creating new entries works well, however, i dont know how to use ModelForms to edit/update an existing entry. I can instantiate a ModelForm with a database instance using:

form  = MyModelForm(instance=MyModel.objects.get(pk=some_id))

However, when i pass this to a template and edit a field and then try to save it, i create a new database entry instead of updating "some_id"?

Edit1: This is my view

def editData(request):
if request.method == 'POST':
    form = MyModelForm(request.POST, request.FILES)

    if form.is_valid():
        editedEntry = form.save() # <-- creates new entry, instead of updating

解决方案

Remember you still need to use the instance parameter when you instantiate on POST.

instance = MyModel.objects.get(whatever)
if request.method == "POST":
    form = MyModelForm(request.POST, instance=instance)
    ...

else:
    form = MyModelForm(instance=instance)

这篇关于Django:使用ModelForm编辑现有的数据库条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆