我想在模板中添加一个 edit 选项,该选项仅从模型中检索数据并显示它。单击 edit 按钮时,先前已填写并保存的表单应显示为已保存的数据。但以我为例,该表单将呈现空白字段,并在每个字段上方显示“此字段必填”。我该如何在可编辑模式下使用预先填充的字段来呈现表单?
这是首次保存数据的视图:
@login_required
def addprofileView(request):
if request.method == "POST":
form = UserProfileForm(request.POST, request.FILES)
if form.is_valid():
new_user_profile = form.save(commit=False)
new_user_profile.user = request.user
new_user_profile.save()
return redirect('add_license')
else:
form = UserProfileForm()
return render(request, 'addprofile.html', {'form': form})
这是用于编辑的视图,该视图应返回预先填充的形式:
@login_required
def editprofileView(request, pk):
ac = get_object_or_404(Account, pk=pk)
if request.method == "POST":
form = UserProfileForm(request.POST, instance=ac)
if form.is_valid():
ac = form.save(commit=False)
ac.user = request.user
ac.save()
return redirect('view_profile', ac.pk)
else:
form=UserProfileForm(instance=ac)
return render(request, 'addprofile.html', {'form': form})
@login_required
def ProfileView(request, pk):
profile = Account.objects.filter(pk = pk)
return render(request, 'userprofile.html', {'pr': profile})
我在做什么错了?
重定向到editprofileView的模板:
{% block content %}
{% for p in pr %}
Name: {{ request.user.username }}
Mobile: {{ p.mobile }}
city: {{ p.city }}
building no: {{ p.building_no }}
state: {{ p.state }}
ZIP: {{ p.zip }}
Country: {{ p.country }}
Sex: {{ p.sex }}
<form action="{% url 'edit_profile' p.pk %}" method="post">
{% csrf_token %}
<input type="submit" value="Edit">
</form>
{% endblock %}
此模板中的操作URL将Account属性pk发送到editprofileView。
答案 0 :(得分:1)
好吧,问题在于您首先要发布到该视图。你不应该POST用于提交数据。您没有显示该按钮,但是它应该是一个简单的链接,或者是包含method="GET"
的表单的一部分。