Как создать подкласс регистрационной формы в django-регистрации

StackOverflow https://stackoverflow.com//questions/21004455

  •  20-12-2019
  •  | 
  •  

Вопрос

Я хочу, чтобы пользователь согласился с TOS, а также поддерживал уникальные электронные письма.django-registration имеет две разные формы регистрации подклассов, которые делают это: RegistrationFormTermsOfService и RegistrationFormUniqueEmail.

Должен ли я создать свою собственную подкласс RegistrationForm, а затем предоставить обе эти функции?Если да, то как это будет осуществлено?Будет ли регистрационная форма находиться внутри файла form.py моего приложения или где-то еще?

Это было полезно?

Решение

Быстрый взгляд на источник для двух классов показывает:

class RegistrationFormTermsOfService(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which adds a required checkbox
    for agreeing to a site's Terms of Service.

    """
    tos = forms.BooleanField(widget=forms.CheckboxInput,
                             label=_(u'I have read and agree to the Terms of Service'),
                             error_messages={'required': _("You must agree to the terms to register")})


class RegistrationFormUniqueEmail(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which enforces uniqueness of
    email addresses.

    """
    def clean_email(self):
        """
        Validate that the supplied email address is unique for the
        site.

        """
        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(_("This email address is already in use. Please supply a different email address."))
        return self.cleaned_data['email']

Как вы можете видеть, эти два класса не перезаписывают методы, определенные другим, поэтому вы можете просто определить свой собственный класс как:

from registration.forms import RegistrationFormUniqueEmail, RegistrationFormTermsOfService
class RegistrationFormTOSAndEmail(RegistrationFormUniqueEmail, RegistrationFormTermsOfService):
    pass

И он должен работать, однако я это не проверял.Что касается того, где разместить этот класс; forms.py это хорошее место.

Обновлять:

Немного чтения на https://django-registration.readthedocs.org/en/latest/views.html который говорит нам, что мы можем передать представлению некоторые параметры через определение URL-адреса;например, класс формы.Просто используйте URL-адрес, например:

url(r'^register/$',
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top