【发布时间】:2016-12-09 18:01:07
【问题描述】:
我正在使用 Django 表单来验证特定的注册页面。表单设置如下:
class MemberForm(forms.Form):
email = forms.EmailField(label='Email', required=True)
password = forms.RegexField(label='Password', widget=forms.PasswordInput, required=True, regex=r'^(?=.*[A-Za-z])(?=.*\d)[\S]{8,}$')
confirm_password = forms.CharField(label='Confirm Password', widget=forms.PasswordInput, required=True)
full_name = forms.CharField(label='Full Name', required=True)
pref_name = forms.CharField(label='Preferred Name', required=False)
phone = forms.RegexField(label='Phone', regex=r'^\+?1?\d{9,15}$', required=True)
address = forms.CharField(label='Address', required=True)
city = forms.CharField(label='City', required=True)
provinces = forms.ChoiceField(label='Provinces', choices=PROVINCE_CHOICES, required=True)
postal_code = forms.RegexField(label='Postal Code', regex=r'^([A-Z][0-9][A-Z]\s[0-9][A-Z][0-9])$')
dob = forms.DateField(label='Birthday', required=True)
occupation = forms.CharField(label='Occupation', required=True)
在这方面一切正常,表单接受它应该接受的一切并拒绝它应该接受的一切。如果表单无效,我会再次渲染。这一切都在以下视图中完成:
def create_member(request):
form = forms.MemberForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
#redirect
provinces = Provinces.objects.all()
return render(request, 'party/adminCreateAccount2.html', {'form': form, 'provinces': provinces, 'today': str(now_date())})
因此,如果表单无效,我只需留在页面上并重复使用当前表单。但是,当表单重新加载时,由于某种原因,所有具有空格的数据都会在显示时擦除空格之后的所有内容。
例如,如果我使用“Test Test”作为我的全名,然后将其他所有内容留空,当页面重新加载时,我只会看到“Test”。
我的表单使用以下自定义模板显示:
{% for field in form %}
<div class="form-row grp-row grp-cells-1 {{ field.html_name }}">
<div class="field-box l-2c-fluid l-d-4">
<div class="c-1">
<label {% if field.field.required %} class="required" {% endif %} for={{ field.html_name }}>{{ field.label }}</label>
</div>
<div class="c-2">
<input class="vTextField" type="text" name={{ field.html_name }} id={{ field.html_name }} value={{ field.data|default_if_none:"" }}>
</div>
</div>
</div>
{% endfor %}
我尝试在输入旁边输出{{ field.data|default_if_none:"" }},它显示了整个字符串(在我们的示例中为'Test test'),所以我完全被难住了,因为我知道正确的数据正在通过。知道为什么要更改输入值吗?
【问题讨论】:
标签: python html django django-forms django-templates