1

So I created a CustomUserAdmin, so that I can use Email instead of using default username. This is my code.

model.py

class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True)

    USERNAME_FIELD = "email"
    REQUIRED_FIELDS = []

    objects = UserManager()

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from core.models import User

from django.contrib.auth import get_user_model


class CustomUserAdmin(UserAdmin):
    list_display = ("email", "first_name", "last_name", "is_staff")
    search_fields = ("email", "first_name", "last_name")
    ordering = ("email",)
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": (
                    "email",
                    "first_name",
                    "last_name",
                    "password1",
                    "password2",
                ),
            },
        ),
    )


admin.site.register(get_user_model(), CustomUserAdmin)

When I tried to add or modify a User in Admin Page, this Traceback appeared:

Internal Server Error: /admin/core/user/4/change/
Traceback (most recent call last):
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\contrib\admin\options.py", line 809, in get_form
    return modelform_factory(self.model, **defaults)
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\forms\models.py", line 642, in modelform_factory
    return type(form)(class_name, (form,), form_class_attrs)
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\forms\models.py", line 321, in __new__
    raise FieldError(message)
django.core.exceptions.FieldError: Unknown field(s) (username) specified for User

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\contrib\admin\options.py", line 688, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
    ModelForm = self.get_form(
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\contrib\auth\admin.py", line 98, in get_form
    return super().get_form(request, obj, **defaults)
  File "D:\BaiTap\C#\fashion_shop\src\backend\env\lib\site-packages\django\contrib\admin\options.py", line 811, in get_form
    raise FieldError(
django.core.exceptions.FieldError: Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin.

I have tried many solutions such as Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin or Django3: ManyToMany field causes: Unknown field(s) (username) specified for User. Check fields/fieldsets/exclude attributes of class CustomUserAdmin Although I have implemented required fields into the class like search_fields, add_fieldsets, etc. Even changed the order of the code. But it isn't work. What should I do? Did I missed something?

DavDo
  • 25
  • 4
  • Why your User__username is 'None'? – Blind2k May 04 '23 at 17:25
  • I found the solutions in both of 2 links above, and he set username=None. But it is not work either. I also removed the field and remigrate, it raised duplicate error. – DavDo May 04 '23 at 17:47

1 Answers1

1

Add fieldsets too


class CustomUserAdmin(UserAdmin):
    list_display = ("email", "first_name", "last_name", "is_staff")
    search_fields = ("email", "first_name", "last_name")
    ordering = ("email",)
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": (
                    "email",
                    "first_name",
                    "last_name",
                    "password1",
                    "password2",
                ),
            },
        ),
    )
    fieldsets = (
        (None, {"fields": ("email", "password")}),
        ("Personal info", {"fields": ("first_name", "last_name")}),
        (
            "Permissions",
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
        ("Important dates", {"fields": ("last_login", "date_joined")}),
    )
JPG
  • 82,442
  • 19
  • 127
  • 206