urls.py
url(r'^accounts/register/$',register,
{ 'form_class':RegForm},名称= 'registration_register'),
form.py
from registration.forms import *
class RegForm(RegistrationForm):
"""
"""
fullname = forms.RegexField(regex=r'^\w+$',
max_length=30,
widget=forms.TextInput(attrs=attrs_dict),
label=_(u'fullname'))
def clean_fullname(self):
return self.cleaned_data['fullname']
def clean(self):
if not self.errors:
self.cleaned_data['first_name']='%s'(self.cleaned_data['fullname'].split('')[0])
self.cleaned_data['last_name'] = '%s'(self.cleaned_data['fullname'].split('')[1])
super(RegForm, self).clean()
return self.cleaned_data'''
views.py
def register(request, success_url=None,
form_class=RegForm, profile_callback=None,
template_name='registration/registration_form.html',
extra_context=None):
#pform_class = utils.get_profile_form()
if request.method == 'POST':
#profileform = pform_class(data=request.POST,files=request.FILES)
form = form_class(data=request.POST,files=request.FILES)
if form.is_valid():
new_user = form.save(profile_callback=profile_callback)
#profile_obj = profileform.save(commit=False)
#profile_obj.user = new_user
#profile_obj.save()
return HttpResponseRedirect(success_url or reverse('registration_complete'))
else:
form = form_class()
#profileform = pform_class()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name,{'form':form},context_instance=context)
registration_form.html
<dl class="vertical">
<dt><label class="required"for="fullname">Full Name</label></dt>
<dd>
<div class="formHelp"></div>
{{ form.fullname }}
{% for error in form.fullname.errors%}
<span style="color:red">{{ error }}</span>
{% endfor %}
</dd>
<dt><label class="required" for="username">User Name</label></dt>
<dd>
<div class="formHelp"></div>
{{ form.username }}
{% for error in form.username.errors%}
<span style="color:red">{{ error }}</span>
{% endfor %}
</dd>
<dt><label class="required" for="email">Email Address</label></dt>
<dd>
<div class="formHelp"></div>
{{ form.email }}
{% for error in form.email.errors %}
<span style="color:red">{{ error }}</span>
{% endfor %}
</dd>
<dt><label for="password"class="required">Password</label></dt>
<dd>
<div class="formHelp"></div>
{{ form.password1 }}
{% for error in form.password1.errors %}
<span style="color:red">{{ error }}</span>
{% endfor %}
</dd>
<dt><label for="password2"class="required">Confirm Password</label></dt>
<dd>
<div class="formHelp"></div>
{{ form.password2 }}
{% for error in form.password2.errors %}
<span style="color:red">{{ error }}</span>
{% endfor %}
</dd>
**
保存时 全名:| _____ |输入有效值。
**
答案 0 :(得分:0)
我认为你有一个更大的问题,那就是你假设一个人有一个名字和一个姓氏,用空格分隔。像Anne Marie这样的名字有一个空间。为什么不直接问他们名字和姓氏?这在网络表单上非常标准。
答案 1 :(得分:0)
问题是您的表单缺少first_name和last_name字段,因此保存它时甚至不会查找这些值。
您可以在保存表单后手动填写这些值,但只有在表单验证时才能执行此操作 - 至少在Firefox regexp测试工具中,您的正则表达式在“Anne Marie”上失败 - 尝试将其更改为^[\w ]+$
表单验证后,您可以保存名字和姓氏:
if form.is_valid():
new_user = form.save(profile_callback=profile_callback)
new_user.first_name = form.cleaned_data['first_name']
new_user.last_name = form.cleaned_data['last_name']
new_user.save()
这个代码当然应该采用表单的保存方法,但是对于快速测试,它没问题。