[英]Django: update creating new object instead of updating existing in django?
[英]How to update an existing record instead of creating a new one in django?
所以我在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塊中專門調用create
,因此您自然會創建一條記錄。 但是,通過這樣做,您可以繞過模型形式為您提供的所有幫助。
你應該傳遞instance
,而不是傳遞initial
; 然后在is_valid塊中,您應該調用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})
隨着線條
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)
您正在創建並保存新實例。
當您在recipe
有舊配方時,要更新它,您只需要用以下內容替換這些行:
recipe.title = data['title']
recipe.description = data['description']
recipe.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.