Django覆盖表中的现有实例

时间:2012-02-16 23:15:34

标签: django django-forms django-views

我正在一个页面中创建一个表单,然后在另一个页面中我正在尝试提取表单(已经填充了已保存在其中的数据)并且想要对其进行更改以便在我保存时它会覆盖实例而不是创建另一个实例。

def edit(request):

   a = request.session.get('a',  None)

   if a is None:
       raise Http404('a was not found')

   if request.method == 'POST':
       form = Name_Form(request.POST, instance=a)
       if form.is_valid():
           j = form.save( commit=False )
           j.save()
   else:
       form = Name_Form( instance = a )

这是我对“编辑表单”视图的代码。当我打开此页面时,表单已成功预先填充了所有数据。但是,当我进行更改并保存时,它不会覆盖现有实例,而是会创建一个新实例。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看看这里:https://docs.djangoproject.com/en/dev/ref/models/instances/#how-django-knows-to-update-vs-insert 我想这可能会对你有帮助。

更新: 如何尝试更“明确”的方式呢? 假设,id_of_Name仅存储您要编辑的模型的id或pk(我假设模型名为“Name”)。然后从会话中检索id / pk以查询数据库实例的数据库。还尝试直接调用表单上的save方法。

def edit(request):

   id_of_Name = request.session.get('a',  None)

   if id_of_Name is None:
       raise Http404('id_of_Name was not found')
   instance = Name.objects.get(pk=id_of_Name)
   if request.method == 'POST':
       form = Name_Form(request.POST, instance=instance)
       if form.is_valid():
           form.save()
   else:
       form = Name_Form( instance = instance )