1

这个问题是 Muki 在这里解释的解决方案的后续:

将自定义字段添加到 django-registration 时出现问题

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

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

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

4

2 回答 2

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)

这会将您的两个可选字段添加到默认注册表单中。要告诉您的自定义后端使用这种新形式而不是默认形式,您需要更改Muki 答案get_form_class中的方法,解释了如何做到这一点。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您调用的新后端。

查看默认后端源以了解您可以覆盖的其他方法。希望有帮助。

于 2013-02-02T20:44:50.460 回答
0

链接 很好地解释了该过程并与 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)
于 2013-07-02T05:30:53.137 回答