无法为django-registration添加自定义字段

1 投票
3 回答
2487 浏览
提问于 2025-04-15 23:19

我扩展了 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)

但是,我还是看到默认的表单,只包含四个字段。

3 个回答

0

我不太确定为什么它不工作,但我很确定你不需要去修改django-registration的views.py文件……你可以在urls.py里把你新的CustomRegistrationFormUniqueEmail作为一个参数传进去。

3

我们最近实现了一个这样的表单。以下是我们所做的步骤:

  • 创建一个新的 backend(可以先从默认的后端复制一份来开始)

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

    ...

  • 在新的 urls.py 文件中,调整后端的参数

    ...
    { 'backend': 'registration.backends.custom.DefaultBackend' },
    ...
    
  • custom 文件夹下创建一个 forms.py 文件。根据你的需求调整这个表单(字段和验证规则)

  • 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
    

撰写回答