Dango:使用POST和模型实例调用时,表单呈现空白字段

时间:2019-02-22 11:26:06

标签: django django-models django-forms django-views

我想在模板中添加一个 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。

1 个答案:

答案 0 :(得分:1)

好吧,问题在于您首先要发布到该视图。你不应该POST用于提交数据。您没有显示该按钮,但是它应该是一个简单的链接,或者是包含method="GET"的表单的一部分。