更新视图不显示数据



我有一个基于函数的视图,它不加载输入的数据。视图根本不会抛出任何错误。它只是将表单显示为空白表单。

urls . py

path('edit/<slug>/', editPost, name='edit'),

views.py

@login_required
def editPost(request, slug):
if request.method == 'POST':
post = get_object_or_404(Post, slug=slug)
form = PostForm(request.POST or None, request.FILES or None, instance=post)
if form.is_valid():
post.author = request.user.username
post.updated = True
form.save()
return redirect('dashboard')
else:
form = PostForm(request.POST, request.FILES, instance=post)
return render(request, 'edit_post.html', {'form': form})

模板

<form class="dropdown-item" action="{% url 'edit' slug=post.slug %}" method="post">{% csrf_token %}
<input class="btn btn-sm" type="submit" value="Edit">

模板中呈现表单,使用{{ form.as_p }}

<form class="dropdown-item" action="{% url 'edit' slug=post.slug %}" method="post">
{% csrf_token %}
<!-- render form here -->
{{ form.as_p }}
<input class="btn btn-sm" type="submit" value="Edit">
</form>

循环遍历表单字段

<form class="dropdown-item" action="{% url 'edit' slug=post.slug %}" method="post">
{% csrf_token %}
<!-- render form here -->
{% for field in form %}
{{ field.label }}
{{ field }}
{{ field.error }}
{% endfor %}
<input class="btn btn-sm" type="submit" value="Edit">
</form>
@login_required
def editPost(request, slug):
post = get_object_or_404(Post, slug=slug)
if request.method == 'POST':
form = PostForm(request.POST or None, request.FILES or None, instance=post)
if form.is_valid():
post.author = request.user.username
post.updated = True
form.save()
return redirect('dashboard')
else:
form = PostForm(instance=post)
return render(request, 'edit_post.html', {'form': form})

可能你必须做这样的事情,没有任何理由通过request.POSTrequest.FILES当你没有POST动作在视图中。通过这种方式,您只需要传递包含所有相关信息的post对象。

你还必须以以下方式呈现你的表单:

<form class="dropdown-item" action="{% url 'edit' slug=post.slug %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<!-- render form here -->
{{ form.as_p }}
<input class="btn btn-sm" type="submit" value="Edit">
</form>

请注意,enctype="multipart/form-data"是强制性的,因为你正在处理表单中的其他文件,它将无法正常工作。

也检查你必须把你的post = get_object_or_404(Post, slug=slug)行,因为在他们的方式,你可以传递对象到任何正在执行的操作(POST或GET)。

相关内容

  • 没有找到相关文章

最新更新