设置 {{ user.email }} 作为输入值不会保存 Django 表单?

问题描述 投票:0回答:1

我尝试将输入的默认值设置为

{{ user.email }}
,以便用户在提交 POST 请求时不必再次输入电子邮件。当用户注册帐户时,他们会使用他们的电子邮件,我将其存储在模型中。然而,当我测试这个时,我收到一个字段错误,指出电子邮件字段是必需的。

我正在我的

views.py
文件中打印错误,如下所示:

form = UserDataForm(request.POST)
for field in form:
    print("field_error: ", field.name, field.errors)
field_error: email <ul class="errorlist"><li>This field is required.</li></ul>

我像这样通过 JavaScript 设置输入值,并且还通过将

display
设置为
none
来隐藏输入:

document.querySelector("#id_email").setAttribute("value", "{{user.email}}")
document.querySelector("#id_email").value = "{{user.email}}"
document.querySelector("#id_email").style.display = "none"

我使用了检查元素,我看到输入标签在 value 属性中显示了电子邮件:

<input type="email" name="email" maxlength="320" required id="id_email" value="[email protected]" style="display: none;">

forms.py

class UserDataForm(forms.Form):
    email = forms.EmailField(required=True, label="Email address")
    # other fields

models.py

class UserDataModel(models.Model):
    email = models.EmailField(default="", max_length=100)
    # other fields

views.py

from .models import UserDataModel
from .forms import UserDataForm

def profile(request):
    if request.method == "POST":

        form = UserDataForm(request.POST)

        if form.is_valid():
            cd = form.cleaned_data
            f = UserDataModel(
                email = cd['email'],
                # other fields
            )
            f.save()
    else:
        form = UserDataForm()

    return render(request, 'profile.html', {"form": form})

如果我做错了什么,请告诉我,因为我是 Django 的新手。我真的很感谢您的帮助,因为我已经为此工作了几个小时,非常感谢。

我期待着保存表格。

python django django-models django-forms
1个回答
0
投票

html 模板尝试使用

{{user.email}}
作为输入元素的值:

document.querySelector("#id_email").value = "{{user.email}}"

但是视图函数并没有提供名为

user
的变量,它只提供了名为
form
的变量:

return render(request, 'profile.html', {"form": form})

...所以 html 模板将

{{user.email}}
视为空白字符串。

也许您打算使用

{{form.email}}
来代替?

© www.soinside.com 2019 - 2024. All rights reserved.