Моя форма отображается несколько раз в шаблоне - PullRequest
1 голос
/ 29 марта 2020

Я хочу, чтобы две разные формы были в одном и том же шаблоне, но первая форма показывается дважды вместо второй, кроме того, я не знаю, пропадет ли при этом пароль без указания совета, какая-то помощь, пожалуйста?

шаблон

  <div class="tab-pane container p-0 active" id="home1">
                                  <form method="POST" action="#" id="datosForm" > {% csrf_token %}
                                    <p>Por favor, no dejes ningún campo en blanco.
                                      {{ form.as_ul }}
                                    <button class="btn btn-primary py-1 px-2" type="submit" name="datosForm"> Save </button>
                                    </p>
                                  </form>
                                  </div>
                                  <div class="tab-pane container p-0 fade" id="home2">
                                      <form method="POST" action="#" id="contraForm"> {% csrf_token %}
                                         <p>Por favor, llena los siguientes campos para cambiar tu contraseña.
                                           {{form.as_ul }}
                                             <button class="btn btn-primary py-1 px-2" type="submit" name="contraForm" > Save </button>
                                          </p>
                                      </form>
                                  </div>

views.py

def  profileedit_view(request):
form= PerfilEditadoForm(request.POST or None)
if request.method== 'POST'and 'datosform' in request.POST:
    form.instance = request.user
    if form.is_valid():
        form.save()
        return redirect('profileedit')
    else:
        form= PerfilEditadoForm(instance=request.user)
        args= {'form': form}
        return render(request, 'profileedit.html', args)
context = {
    'form': form
}
return render(request, "profileedit.html", context)
def change_password_view(request):
if request.method == 'POST' and 'contraform' in request.POST:
    form = PasswordChangeForm(request.user, request.POST)
    if form.is_valid():
        user = form.save()
        update_session_auth_hash(request, user)  # Important!
        messages.success(request, 'Contraseña cambiada con éxito')
        return redirect('profileedit')
    else:
        messages.error(request, 'Ha ocurrido un error.')
else:
    form = PasswordChangeForm(request.user)
context = {
    'form': form
}
return render(request, 'profileedit.html', context)

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Попробуйте:

views.py

def  profileedit_view(request):
profile_edit= PerfilEditadoForm(request.POST or None)
if request.method== 'POST'and 'datosform' in request.POST:
    profile_edit.instance = request.user
        if profile_eidt.is_valid():
        profile_edit.save()
        return redirect('profileedit')
else: 
        profile_edit= PerfilEditadoForm(instance=request.user)

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

def change_password_view(request):
if request.method == 'POST' and 'contraform' in request.POST:
    form = PasswordChangeForm(request.user, request.POST)
    if form.is_valid():
        user = form.save()
        update_session_auth_hash(request, user)  # Important!
        messages.success(request, 'Contraseña cambiada con éxito')
        return redirect('profileedit')
else:
        messages.error(request, 'Ha ocurrido un error.')
else:
        form = PasswordChangeForm(request.user)
context = {
'form': form
}
return render(request, 'profileedit.html', context)

Шаблон:

{{ profile_edit.as_ul }} 
{{ form.as_ul }} 
0 голосов
/ 29 марта 2020

В шаблоне вы написали {{form.as_ul}} два раза. Таким образом, вы увидите это два раза. Это не зависит от того, какое поле есть в форме, но какую форму вы отображаете в шаблоне.

...