簡體   English   中英

如何在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM