我延长了 RegistrationFormUniqueEmail

class CustomRegistrationFormUniqueEmail(RegistrationFormUniqueEmail):
    first_name = forms.CharField(label=_('First name'), max_length=30,required=True)
    last_name = forms.CharField(label=_('Last name'), max_length=30, required=True)
    def save(self, profile_callback=None):
        new_user = super(CustomRegistrationFormUniqueEmail, self).save(profile_callback=profile_callback)
        new_user.first_name = self.cleaned_data['first_name']
        new_user.last_name = self.cleaned_data['last_name']
        return new_user

然后更改视图

#       form = form_class(data=request.POST, files=request.FILES)
        form = CustomRegistrationFormUniqueEmail(data=request.POST, files=request.FILES)

但是,我仍然看到默认表单仅包含四个字段。

有帮助吗?

解决方案

我们最近实施了这样的形式。这是我们所做的:

  • 创建一个新的 backend (只需从默认后端复制它)

    registration/
        backends/
            default/
            custom/ # <- your new backend
    

    ...

  • 在新的 urls.py 调整后端参数

    ...
    { 'backend': 'registration.backends.custom.DefaultBackend' },
    ...
    
  • 创建一个 forms.py 在下面 custom. 。将此表格调整为您的喜好(字段和验证)

  • 在里面 registration/urls.py 指向适当的后端:

     # from registration.backends.default.urls import *
     from registration.backends.custom.urls import *
    

那应该起作用。特别是这样做的,因为:

  • 您的 custom/__init__.py 将有一个 DefaultBackend 上课 get_form_class 方法:

    def get_form_class(self, request):
        """
        Return the default form class used for user registration.
        """
        return RegistrationForm
    
  • 你自己进口 RegistrationForm 在该文件中也:

    from registration.backends.custom.forms import RegistrationForm
    

其他提示

我不确定,不确定它为什么不起作用,但我很确定你会做 不是 需要编辑django-Registration views.py ...您可以通过新的 CustomRegistrationFormUniqueEmail 作为论点 urls.py.

你可以尝试在这里看 使用信号扩展Django-Registration 和这里 http://dmitko.ru/?p=546

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top