python - 如何在 django 中更新现有记录而不是创建新记录?

标签 python django django-forms

所以我在views.py中有以下函数:

def recipe_edit(request, pk):
    recipe = get_object_or_404(Recipe, pk=pk)
    if request.method == "POST":
        initial = {'title': recipe.title, 'description': recipe.description}
        form = RecipeForm(request.POST, initial=initial)
        if form.is_valid():
            current_user = request.user
            data = form.cleaned_data
            recipe_data=Recipe.objects.create(user=current_user, title=data['title'], description=data['description'])
            recipe_data.save( force_insert=False, force_update=False, using=None)
            return HttpResponseRedirect('recipe_detail', pk=recipe.pk)
    else:
        initial = {'title': recipe.title, 'description': recipe.description}
        form = RecipeForm(initial=initial)
    return render(request, 'recipe_edit.html', {'form': form, 'recipe':recipe})

但是当我提交表单时,它实际上创建了一条新记录,而不是编辑旧记录。有什么建议如何更新旧记录而不是创建新记录吗?

最佳答案

您应该很明显,您专门在 is_valid block 中调用 create ,因此您自然会创建一条记录。然而,与始终创建一样,通过这样做,您将绕过模型表单为您提供的所有帮助。

您应该传递实例,而不是传递initial;然后在 is_valid block 中您应该调用 form.save

def recipe_edit(request, pk):
    recipe = get_object_or_404(Recipe, pk=pk)
    if request.method == "POST":
        form = RecipeForm(request.POST, instance=recipe)
        if form.is_valid():
            recipe = form.save(commit=False)
            recipe.user = request.user
            recipe.save()
            return redirect('recipe_detail', pk=recipe.pk)
    else:
        form = RecipeForm(instance=recipe)
    return render(request, 'recipe_edit.html', {'form': form, 'recipe':recipe})

关于python - 如何在 django 中更新现有记录而不是创建新记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35413094/

相关文章:

python - 如何编写 url 模式。 python , Django

python - 定位 libmysqlclient_r.so.16 issue

javascript - 具有动态表单添加的 Modelformset 仅保存第一个表单

django modelformset_factory 即使在成功创建对象后也能维持先前提交的数据

python - 使用 Python apiclient 从 Google GWT Appengine 向 Freebase 发出多个 MQL 查询

类中的 Python Tkinter 滚动条

python - 限制某些用户添加新标签,django-taggit?

django-templates - Django 添加类以形成 <input ..> 字段

python - 查找 "pylons + sqlalchemy"的示例应用程序

python - Pandas :两个 datetime64 对象的差异产生 NaT 而不是正确的 timedelta 值