Pregunta

Deseo que el usuario acepte los TOS y también admita correos electrónicos únicos.django-registration tiene dos formularios de registro con subclases diferentes que hacen esto: RegistrationFormTermsOfService y RegistrationFormUniqueEmail.

¿Tengo que crear mi propia subclase de RegistrationForm y luego proporcionar ambas funciones?Si es así, ¿cómo se lograría esto?¿El formulario de registro viviría dentro del formulario Forms.py de mi aplicación o en algún otro lugar?

¿Fue útil?

Solución

Una mirada rápida a la fuente para las dos clases muestra:

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']

Como puede ver, estas dos clases no sobrescriben los métodos definidos por la otra, por lo que debería poder definir su propia clase como:

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

Y debería funcionar, sin embargo, no lo he probado.En cuanto a dónde colocar esta clase; forms.py es una buena ubicación.

Actualizar:

Un poco de lectura en https://django-registration.readthedocs.org/en/latest/views.html lo que nos dice que podemos pasarle a la vista algunos parámetros a través de la definición de la URL;por ejemplo, una clase de formulario.Simplemente use una URL como:

url(r'^register/$',
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top