Django-Registration:要求创建名字/姓氏的帐户创建?

时间:2013-02-02 19:07:39

标签: django

这个问题是Muki解释的解决方案的后续行动:

Problem in adding custom fields to django-registration

我已经安装并成功使用了Django注册包。默认情况下,当您使用此程序包创建帐户时,它会询问您的用户名,电子邮件地址和密码。我希望它也要求(可选)名字+姓氏。 Muki在上面的链接中的答案解释了如何这样做。

但是,Muki忽略了他在custom / forms.py中创建的文件。我需要知道我应该在这里创建的类的名称是什么以及字段定义应该是什么样的。

有人可以发一个示例form.py,我可以用它来完成我想要做的事情吗?

2 个答案:

答案 0 :(得分:0)

如果您的自定义后端位于custom文件夹中,则custom/forms.py可能是这样的:

from django import forms
from registration.forms import RegistrationForm


class RegistrationFormWithName(RegistrationForm):
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)

这会将您的两个可选字段添加到默认注册表单中。要告诉您的自定义后端使用此新表单而不是默认表单,您需要更改get_form_class Muki's answer中的custom/__init__.py方法,并说明如何执行此操作。

当然,您还需要处理保存first_namelast_name字段中的数据。

修改

您的custom/__init__.py需要看起来像这样:

from registration.backends.default import DefaultBackend
from registration.backends.custom.forms import RegistrationFormWithName

class CustomBackend(DefaultBackend):
    def get_form_class(self, request):
        return RegistrationFormWithName

custom/urls.py需要这样的一行:

url(r'^register/$', register, {'backend': 'registration.backends.custom.CustomBackend'}, name='registration_register'),

将两个文件中CustomBackend类的名称更改为您调用新后端的名称。

查看default backend source以了解您可以覆盖的其他方法。希望有所帮助。

答案 1 :(得分:0)

这个link很好地解释了这个过程并使用了django-registration 1.0

除了上面的代码之外,还有一些额外的指针。

要更新名字,请在models.py

中更改此名称
def user_registered_callback(sender, user, request, **kwargs):
profile = ExUserProfile(user = user)
profile.is_human = bool(request.POST["is_human"])
user.first_name = request.POST["firstname"]
user.save()
profile.save()

user_registered.connect(user_registered_callback)

并在forms.py文件中

class ExRegistrationForm(RegistrationForm):
    is_human = forms.BooleanField(label = "Are you human?:")
    firstname = forms.CharField(max_length=30)
    lastname = forms.CharField(max_length=30)

最后看到表单上的更改创建了一个合适的模板。通过在应用程序中创建名为admin.py的文件并编写以下代码

,可以在管理员中看到该配置文件
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from prof.models import ExUserProfile

admin.site.unregister(User)

class UserProfileInline(admin.StackedInline):
    model = ExUserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [ UserProfileInline, ]

admin.site.register(User, UserProfileAdmin)