Prevent user registration - when any UserProfile filed is invalid
ra00f opened this issue · comments
Hello,
I'm trying to use django-registration-redux along with custom_user. I have added both apps to settings.py
My main urls.py is as given below
from userprofile.forms import UserProfileForm
from registration.backends.default.views import RegistrationView
urlpatterns = [
url(r'user/register/$',
RegistrationView.as_view(form_class = UserProfileForm),
name = 'registration_register'),
url(r'^user/', include('registration.backends.default.urls')),
]
I have a UserProfile model as given below. (userprofile/models.py)
def validate_dob(value):
now=timezone.now()
start_date=date(now.year-settings.AGE_UPPER, 1, 1)
end_date=date(now.year-settings.AGE_LOWER, 12, 31)
print("start: %s end: %s supplied :%s" % (start_date, end_date, value))
if start_date >value or value > end_date:
raise ValidationError("Please choose a valid date from the given set")
#----------------------------------------
class UserProfile(models.Model):
user=models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
primary_key=True,)
fullname=models.CharField(max_length=70, blank=False)
dob=models.DateField(blank=False,validators=[validate_dob] )
photo=models.ImageField(upload_to='profile_images', blank=False)
def __str__(self):
return self.user.email
def get_profile(self):
return self.user.id
#-------------------------------------
def user_registered_callback(sender, user, request, **kwargs):
#print(user.email)
profile = UserProfile(user = user)
print(request.POST)
profile.fullname =request.POST["fullname"]
profile.dob ="%s-%s-%s" % (request.POST["dob_year"],request.POST["dob_month"],request.POST["dob_day"])
#profile.dob=request.POST["dob"]
if 'photo' in request.FILES:
profile.photo = request.FILES['photo']
profile.save()
user_registered.connect(user_registered_callback)
and here's my userprofile/forms.py
class UserProfileForm(RegistrationForm):
fullname=forms.CharField(required=True,label="Full name", min_length=3, max_length=75)
dob=forms.DateField(required=True,label="Date of birth",
widget=forms.SelectDateWidget(years=range(now.year-settings.AGE_UPPER,now.year-settings.AGE_LOWER)))
photo=forms.ImageField(required=True)`
How do I prevent inserting User values into the table if the filed, say dob is not in the specified range (AGE_UPPER=70 ,AGE_LOWER=18)
Please tell me if I'm making this over complicated.
Thanks
This should be a question for django-registration-redux or the django-users mailing list, since django-custom-user is not doing anything here and I've never used django-registration-redux myself.
Anyway I did a quick look and it seems the problem is that your UserProfileForm is not using the validator that you created. You should put validators=[validate_dob]
in the dob
field of the form like this:
from .models import validate_dob
class UserProfileForm(RegistrationForm):
fullname=forms.CharField(required=True,label="Full name", min_length=3, max_length=75)
dob=forms.DateField(validators=[validate_dob], required=True,label="Date of birth",
widget=forms.SelectDateWidget(years=range(now.year-settings.AGE_UPPER,now.year-settings.AGE_LOWER)))
photo=forms.ImageField(required=True)`
Hope it helps