【问题标题】:Dango: form rendering empty fields when calling with POST and an instance of the modelDango:使用 POST 和模型实例调用时表单呈现空字段
【发布时间】:2019-02-22 11:26:06
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-20
      • 2021-12-15
      • 2014-07-17
      • 2013-10-03
      • 2019-11-17
      • 1970-01-01
      • 2018-07-14
      • 2018-10-20
      相关资源
      最近更新 更多