我正在创建一个待办事项列表,可以在其中创建待办事项,并针对每个项目提供一个按钮来更新它。我正在使用ModelForm将数据保存到DB。 更新按钮将我带到具有选定任务实例的“ update.html”。但是,当我更新任务信息并单击“提交”时,它将使用更新后的信息创建一个新任务,并且不会更新同一任务。 请帮助我,我被困住了。
views.py
from django.shortcuts import render, redirect
from .models import Task
from .forms import *
def index(request):
tasks = Task.objects.all()
form = TaskForm()
if request.method == 'POST':
form = TaskForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
context = {'tasks':tasks,'form':form}
return render(request,'TaskList/list.html',context)
def update(request, pk):
task = Task.objects.get(id = pk)
if request.method == 'POST':
form = TaskForm(request.POST, instance=task)
if form.is_valid():
form.save()
return redirect('/')
else:
form = TaskForm(instance = task)
context = {'task':task, 'form':form}
return render(request,'TaskList/update.html', context)
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name = 'list'),
path('update/<str:pk>/', views.update, name = 'update')
]
update.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method = 'POST' action = ''>
{% csrf_token %}
{{form}}
<input type = 'submit' name = 'Update'>
</form>
</body>
</html>
list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ToDoList</title>
</head>
<body>
<form method = 'POST' action = ''>
{% csrf_token %}
{{form.title}}
<input type = 'submit' name = 'Create Task'>
</form>
{% for task in tasks %}
<div>
<a href = "{% url 'update' task.id %}">Update</a>
<p>{{task.title}}</p>
</div>
{% endfor %}
</body>
</html>
答案 0 :(得分:0)
在这里,您将再次保存创建新记录的表单(在更新功能中)。 而是尝试从db之类获取对象
form_object = <model_name>.objects.get(id = id)
form_object.<parameter_to_be_updated> = <the value you want>
form_object.save()