Django форма не показывает правильные поля - PullRequest
0 голосов
/ 29 марта 2020

Форма 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>

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Ваша форма переопределяется на 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)
0 голосов
/ 29 марта 2020

В файле forms.py измените скобки - используйте [] вместо ()

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