Opened 7 years ago
Closed 7 years ago
#29807 closed Bug (invalid)
Custom user model with SlugField username causes `allow_unicode` error in admin
| Reported by: | Jesse | Owned by: | Adiyat Mubarak |
|---|---|---|---|
| Component: | contrib.auth | Version: | 2.1 |
| Severity: | Normal | Keywords: | slugfield allow_unicode error admin |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
After modifying the user model to use a SlugField for the username, I can no longer add or modify users in the Django admin panel because of the following error:
TypeError at /admin/user/user/6/change/ __init__() got an unexpected keyword argument 'allow_unicode' Exception location: ...venv/lib/python3.6/site-packages/django/forms/fields.py in __init__, line 213
Inspecting the SlugField definition you can see that it accepts a param called allow_unicode:
class SlugField(CharField):
default_validators = [validators.validate_slug]
description = _("Slug (up to %(max_length)s)")
def __init__(self, *args, max_length=50, db_index=True, allow_unicode=False, **kwargs):
self.allow_unicode = allow_unicode
if self.allow_unicode:
self.default_validators = [validators.validate_unicode_slug]
super().__init__(*args, max_length=max_length, db_index=db_index, **kwargs)
My user model is based off the Django auth model:
class User(AbstractUser):
username = models.SlugField("username", max_length=20, unique=True,
error_messages={
"unique": "A user with that username already exists."
})
email = models.EmailField("email", unique=True,
error_messages={
"unique": "A user with that email already exists."
})
# Users are required to login using their email
USERNAME_FIELD = "email"
REQUIRED_FIELDS = [ "username" ]
The model is registered in the admin panel as follows:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin)
The error goes away if I comment out the username field and run a migration to revert back to the old username which uses a CharField.
requirements.txt:
argon2-cffi==18.3.0 cffi==1.11.5 Django==2.1.1 djangorestframework==3.8.2 pycparser==2.19 pytz==2018.5 six==1.11.0
Change History (5)
comment:1 by , 7 years ago
| Severity: | Normal → Release blocker |
|---|
comment:2 by , 7 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 7 years ago
I also had this issue when reproducing this using python 3.7 and the same requirements in above.
Will trying to fix this after this ticket accepted as an issue.
comment:4 by , 7 years ago
| Severity: | Release blocker → Normal |
|---|
The allow_unicode parameter was added in 2015 (f8cc464452f495fce2a3d6f7494396c8f798a1e6). A bug this may be but it's not in a new feature, and it's not likely this ever worked, so it's not a regression. Therefore it's not a release blocker.
comment:5 by , 7 years ago
| Component: | contrib.admin → contrib.auth |
|---|---|
| Resolution: | → invalid |
| Status: | assigned → closed |
| Summary: | SlugField causes `allow_unicode` error in Django admin panel → Custom user model with SlugField username causes `allow_unicode` error in admin |
The cause of the issue is documented, "the following forms are tied to User and need to be rewritten or extended to work with a custom user model: UserCreationForm."
Allowing UserCreationForm to work with custom user models is tracked in #28608.
Hi,
Let me reproduce this on my machine and I will do a bug fix to this ticket.