这可能是
this
回答。目前,我正在使用用于创建对象的相同模型表单更新对象。
我的
views.py
看起来像:(从答案看):
def newpost(request):
form = PostForm(request.POST)
if request.method == "POST":
if form.is_valid():
obj = form.save(commit=False)
obj.save()
return redirect('newpost')
return render(request, 'console/newpost.html', {'form':form})
def editpost(request, pk):
obj = Post.objects.get(id=pk)
form = PostForm(instance=obj)
if request.method == "POST":
if form.is_valid():
obj = form.save(commit=False)
obj.save()
return redirect('editpost')
return render(request, 'console/editpost.html', {'form':form})
我的html表单
editpost
看起来像:
<form method="POST" action="{% url 'newpost' %}">
{% csrf_token %}
{{form.as_p}}
<button type="submit"> Submit</button>
</form>
还有我的
urls.py
看起来像:
path('console/post/', c_views.newpost, name='newpost'),
path('console/post/<int:pk>/', c_views.editpost, name='editpost'),
上面的代码工作得很好,但是创建了一个新的实例,对象的数据取自pk。
我加了一个
obj.delete()
这样的代码:
def editpost(request, pk):
obj = Post.objects.get(id=pk)
form = PostForm(instance=obj)
obj.delete()
if request.method == "POST":
if form.is_valid():
obj = form.save(commit=False)
obj.save()
return redirect('editpost')
return render(request, 'console/editpost.html', {'form':form})
这段代码给了我想要的东西,但我知道这不是一个好的做法。我的问题是,这是一个正确的方式还是我落后了。
我知道我的行为
编辑帖子
html不应该是
{% url 'newpost' %}
,但如果我使用
{% url 'editpost' %}
我不知道如何在url标记中传递pk值。有人能告诉我正确的方法吗?