我已包含 firstname
的字段和lastname
在django-registration
形式。但注册后我的admin page
未显示已注册的first name
和last name
,它是空白的,但是 username
和email address
显示。
请阅读docstring
如 source code
中提供的如下:
这是 RegistrationForm
的代码来自django-registration
from django.contrib.auth.models import User
from django import forms
from django.utils.translation import ugettext_lazy as _
class RegistrationForm(forms.Form):
"""
Form for registering a new user account.
Validates that the requested username is not already in use, and
requires the password to be entered twice to catch typos.
Subclasses should feel free to add any additional validation they
need, but should avoid defining a ``save()`` method -- the actual
saving of collected user data is delegated to the active
registration backend.
"""
required_css_class = 'required'
username = forms.RegexField(regex=r'^[\w.@+-]+$',
max_length=30,
label=_("Username"),
error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
email = forms.EmailField(label=_("E-mail"))
password1 = forms.CharField(widget=forms.PasswordInput,
label=_("Password"))
password2 = forms.CharField(widget=forms.PasswordInput,
label=_("Password (again)"))
first_name=forms.RegexField(regex=r'^[\w.@+-]+$',
max_length=30,
label=_("first name"),
error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
last_name=forms.RegexField(regex=r'^[\w.@+-]+$',
max_length=30,
label=_("last name"),
error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
def clean_username(self):
"""
Validate that the username is alphanumeric and is not already
in use.
"""
existing = User.objects.filter(username__iexact=self.cleaned_data['username'])
if existing.exists():
raise forms.ValidationError(_("A user with that username already exists."))
else:
return self.cleaned_data['username']
def clean(self):
"""
Verifiy that the values entered into the two password fields
match. Note that an error here will end up in
``non_field_errors()`` because it doesn't apply to a single
field.
"""
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_("The two password fields didn't match."))
return self.cleaned_data
编辑:
def register(self, request, **cleaned_data):
username, email, password,first_name,last_name = (cleaned_data['username'], cleaned_data['email'], cleaned_data['password1'],
cleaned_data['first_name'],cleaned_data['last_name'])
if Site._meta.installed: # @UndefinedVariable
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email,
password, site, first_name,last_name)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
def create_inactive_user(self, username, email, password,
site, send_email=True,first_name=None, last_name=None):
new_user = User.objects.create_user(username, email, password)
if first_name:
new_user.first_name=first_name
if last_name:
new_user.last_name=last_name
new_user.is_active = False
new_user.save()
registration_profile = self.create_profile(new_user)
if send_email:
registration_profile.send_activation_email(site)
return new_user
create_inactive_user = transaction.commit_on_success(create_inactive_user)
最佳答案
更新:
您可以将 Registration/Models.py
上的 create_inactive_user
更改为如下所示...
def create_inactive_user(self, username, email, password,
site, send_email=True, first_name=None, last_name=None):
"""
Create a new, inactive ``User``, generate a
``RegistrationProfile`` and email its activation key to the
``User``, returning the new ``User``.
By default, an activation email will be sent to the new
user. To disable this, pass ``send_email=False``.
"""
new_user = User.objects.create_user(username, email, password)
new_user.is_active = False
new_user.first_name = first_name
new_user.last_name = last_name
new_user.save()
registration_profile = self.create_profile(new_user)
if send_email:
registration_profile.send_activation_email(site)
return new_user
请注意,它现在接受 first_name
和 last_name
。另请注意 new_user.first_name = first_name
和 new_user.last_name = last_name
然后在 Registration/backends/default/views.py
上,您会希望 register
看起来像这样...
def register(self, request, **cleaned_data):
username, email, password, first_name, last_name = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1'], cleaned_data['firstname'], cleaned_data['lastname']
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email, password, site, first_name, last_name)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
注意firstname
(这是您的表单获取它的方式)和first_name
(这是它被存储然后传递给create_inactive_user
.
关于django - 为什么名字和姓氏字段没有保存在 django-registration 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22567943/