On Fri, Apr 10, 2015 at 3:14 PM, Larry Martell <larry.mart...@gmail.com> wrote:
> I am trying to add custom password validation to the create user and
> change password admin forms. I did not see anything in the django docs
> about how to do this. From what I read on stackoverflow and other
> sites it seems I have to write a validator and then someone hook it
> into the add and change forms.
>
> Here's what I have now in my apps admin.py:
>
> def validate_password_strength(value):
>     """Validates that a password is as least 10 characters long and has at 
> least
>     2 digits and 1 Upper case letter.
>     """
>     min_length = 10
>
>     if len(value) < min_length:
>         raise ValidationError(_('Password must be at least {0} characters '
>                                 'long.').format(min_length))
>
>     # check for 2 digits
>     if sum(c.isdigit() for c in value) < 2:
>         raise ValidationError(_('Password must container at least 2 digits.'))
>
>     # check for uppercase letter
>     if not any(c.isupper() for c in value):
>         raise ValidationError(_('Password must container at least 1
> uppercase letter.'))
>
> class MySetPasswordForm(SetPasswordForm):
>     def __init__(self, *args, **kwargs):
>         super(MySetPasswordForm, self).__init__(*args, **kwargs)
>         self.fields['password1'].validators.append(validate_password_strength)
>
> But what I can't figure out is how do I get MySetPasswordForm to be
> used. Can anyone help me with this. If i am way off base, can someone
> point me in the right direction. Thanks!

I've tried a few different things. First I did this:

class UserAdmin(UserAdmin):
    form = MySetPasswordForm

# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

And I got this error:

<class 'elex_apis.energy.webservice.admin.UserAdmin'>: (admin.E016)
The value of 'form' must inherit from 'BaseModelForm'.

So then I changed MySetPasswordForm to inherit from BaseModelForm and
then I got this error:

__init__() missing 1 required positional argument: 'user'

So then I added the user param so now MySetPasswordForm looked like this:

class MySetPasswordForm(BaseModelForm):
    def __init__(self, user, *args, **kwargs):
        super(MySetPasswordForm, self).__init__(user, *args, **kwargs)
        self.fields['password1'].validators.append(validate_password_strength)

But I still got the same error as before.

I can't believe it's this hard to add a password validator. It must be
a very common need, so clearly I must be missing something simple. Can
anyone please provide some assistance here.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CACwCsY7e%3DkTtvs71PdDG66h1X%3DisWGCgjs7LdpXFtG-n3hRjDQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to