【问题标题】:Django form isn't showing the correct fieldsDjango 表单未显示正确的字段
【发布时间】:2020-07-09 23:06:22
【问题描述】:

允许用户更改信息字段的 django 表单应该允许他们更改用户名、电子邮件、姓名和姓氏,但它会显示他们的国籍、性别、应用程序分数和生日。

views.py

def  profileedit_view(request):
    if request.method== 'POST':
        form= PerfilEditadoForm(request.POST, instance = request.user)
        if form.is_valid():
            form.save()
            return redirect('login')
        else:
            form= PerfilEditadoForm(instance=request.user)
            args= {'form': form}
            return render(request, 'profileedit', args)

    form = UsuarioForm(request.POST or None)
    if form.is_valid():
        form.save()

    context = {
        'form': form
    }
    return render(request, "profileedit.html", context)

forms.py

class PerfilEditadoForm(UserChangeForm):
    class Meta:
        model = User
        fields= ('email', 'username', 'first_name', 'last_name')

profileedit.py

<form method="POST" action="#"> {% csrf_token %}
        <p>
        {{ form.as_ul }}
        <button class="btn btn-primary py-1 px-2" type="submit" > Save </button>
        </p>
        </form>

【问题讨论】:

    标签: python html django forms field


    【解决方案1】:

    在forms.py中 更改括号 - 使用 [] 而不是 ()

    class PerfilEditadoForm(UserChangeForm):
        class Meta:
            model = User
            fields= ['email', 'username', 'first_name', 'last_name']
    

    【讨论】:

      【解决方案2】:

      您的表单正在被form = UsuarioForm(request.POST or None) 覆盖。假设您要显示的字段属于 PerfilEditadoForm,您应该将该行更改为 form = PerfilEditadoForm(request.POST or None)

      我的建议是将特定行移到 if request.method== 'POST': 之前。类似的东西

      def  profileedit_view(request):
          form= PerfilEditadoForm(request.POST or None)
          if request.method== 'POST':
              form.instance = request.user
              if form.is_valid():
                  form.save()
                  return redirect('login')
              else:
                  form= PerfilEditadoForm(instance=request.user)
                  args= {'form': form}
                  return render(request, 'profileedit', args)
      
          context = {
              'form': form
          }
          return render(request, "profileedit.html", context)
      

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-05
        • 2014-12-05
        • 2021-01-22
        相关资源
        最近更新 更多