¿Cómo puedo añadir la verificación de edad a un formulario de registro de Django?

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

  •  09-10-2019
  •  | 
  •  

Pregunta

Tengo una aplicación Django que está utilizando django-registro para manejar registro de nuevos usuarios. Me gustaría añadir la fecha de nacimiento al formulario de inscripción para que pueda comprobar la edad del usuario antes de decidir si se debe permitir que se registren. Sin embargo, no necesito o quiero ni almacenar su fecha de nacimiento como la información del perfil. ¿Cómo puedo añadir esto a la forma de registro y validación de su edad, como parte del proceso de registro?

¿Fue útil?

Solución

Extender la incorporada en el formulario de registro para agregar el campo de fecha de nacimiento y un método para validar LIMPIO_ que es antes de un cierto tiempo. Algo así como:

from datetime import datetime
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        age = (datetime.now() - dob).days/365
        if age < 18:
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob

En su punto de vista que utilizan DOBRegistrationForm igual que lo haría el RegistrationForm normal. Si está utilizando el registration.views.register acaba de pasar la clase como parámetro form_class.

De esta manera se obtendrá un error de forma, si su fecha de nacimiento no está en el rango permitido sin crear ninguna fila en la base de datos.

Otros consejos

Hay un pequeño defecto en la respuesta de rz, ya que no tiene en cuenta años bisiestos.

Si alguien nace el 1 de enero de 1994, la fecha de nacimiento de verificación mencionado en la respuesta de rz calculará como siendo 18 el 28 de diciembre de 2011.

Aquí hay una versión alternativa que lleva años bisiestos en cuenta:

from datetime import date
from registration.forms import RegistrationForm

class DOBRegistrationForm(RegistrationForm):
    date_of_birth = forms.DateField()

    def clean_date_of_birth(self):
        dob = self.cleaned_data['date_of_birth']
        today = date.today()
        if (dob.year + 18, dob.month, bod.day) > (today.year, today.month, today.day):
            raise forms.ValidationError('Must be at least 18 years old to register')
        return dob
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top