#35578: Customizing `username_validator` in custom User model extending
`django.contrib.auth.models.AbstractUser` doesn't work
------------------------------+-----------------------------------------
Reporter: Oscar Rovira | Type: Uncategorized
Status: new | Component: contrib.auth
Version: 5.0 | Severity: Normal
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+-----------------------------------------
Hi there!
I'm sorry if that is the expected behaviour of what I'm going to report,
but looking at the implementation, it should work as I expected.
I have my own authentication `User` model, extending from `AbstracUser`.
Looking at the code of `AbstractUser`, one may think that defining the
class prop `username_validator`, the validation of the username at all the
levels (createsuperuser command, Admin create user form,
User.objects.create_user, ...) should use the new validator provided in
the customized class. It is not working like that. In order to make it
work, one has to re-define also the `username` field in the customized
model.
So, I have the following:
{{{
@deconstructible
class CustomUnicodeUsernameValidator(validators.RegexValidator):
"""Overrides the default username validator from Django Abstract
User to avoid usernames with characters '@', '+' or '.'
"""
regex = r"^[\w-]+\Z"
message = _(
"Enter a valid username. This value may contain only letters, "
"numbers, and -/_ characters."
)
flags = 0
...
class User(AbstractUser):
"""Main app user, extending default Django users."""
# overriding the one defined in AbstractUser
username_validator = CustomUnicodeUsernameValidator() # type: ignore
# Other custom fields
...
}}}
and it does not work, the custom username_validator is not being used.
However, if I redefine the `username` field, including the
`validators=[username_validator]` attribute, it works as expected.
As I said, maybe it is the expected behaviour, and it's just a lack of
documentation.
Thanks!
--
Ticket URL: <https://code.djangoproject.com/ticket/35578>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070190837b5cb8-d7b714c6-bc56-44a6-b147-9c1eb4e7ed02-000000%40eu-central-1.amazonses.com.