django - 为什么名字和姓氏字段没有保存在 django-registration 中?

标签 django django-admin django-registration django-users

我已包含 firstname 的字段和lastnamedjango-registration形式。但注册后我的admin page未显示已注册的first namelast name ,它是空白的,但是 usernameemail address显示。

请阅读docstringsource 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_namelast_name。另请注意 new_user.first_name = first_namenew_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/

相关文章:

Django 1.8 Auth/Registration Redux - 如何使 @login_required 和 .is_authenticated() 检查仅在用户处于事件状态时通过?

javascript - 在 Web 应用程序加载时加载 JSON 响应(JQuery、Django)

python - token 身份验证不适用于 Django Rest 框架

django - 如何在 Django 管理员内联中仅显示一张图像

django admin list_filter 不显示(无)选择字段

django-social-auth django-registration 和 django-profiles -- 一起

python - 如何覆盖 Django-Registration 1.0 版中的默认注册表单?

python - 在代理后面的 Django 中使用 send_mail 时出现错误

python - Django,如何在管理界面中查看 session 数据

python - 我无法决定是使用外键、多对多字段还是选择字段