我尝试将输入的默认值设置为
{{ 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 的新手。我真的很感谢您的帮助,因为我已经为此工作了几个小时,非常感谢。
我期待着保存表格。
html 模板尝试使用
{{user.email}}
作为输入元素的值:
document.querySelector("#id_email").value = "{{user.email}}"
但是视图函数并没有提供名为
user
的变量,它只提供了名为form
的变量:
return render(request, 'profile.html', {"form": form})
...所以 html 模板将
{{user.email}}
视为空白字符串。
也许您打算使用
{{form.email}}
来代替?