1

I am trying to add a "group" field to show group permissions on the user panel in Django 3.1.2. I tried combining this and this, but always end up in either The model User is already registered with 'auth.UserAdmin' or The model User is not registered (when trying to unregister first):

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

# fails in "model User not registered"
admin.site.unregister(User) 

#fails in already registered with auth.UserAdmin
@admin.register(User) 
class UserAdmin(admin.ModelAdmin):
    def group(self, user):
        return ' '.join([g.name for g in user.groups.all()])

    list_display = ['username', 'email', 'first_name', 'last_name', 'is_active', group]
    list_filter = ['groups', 'is_staff', 'is_superuser', 'is_active']

How would I correctly register my custom UserAdmin?

xtlc
  • 1,070
  • 1
  • 15
  • 41

2 Answers2

0

I don't remeber, where I saw answer on SO, but do like: admin.site.unregister(User) before. Than modificate admin.model, as you wish, and then, register again.

from django.contrib.auth.models import User, Group
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin


admin.site.unregister(User)


class GroupInline(admin.StackedInline):
    model = Group


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    inlines = (GroupInline,)
-1

If you want to show the group a user belong to in the list display:

@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
def group(self, user):
    groups = []
    for group in user.groups.all():
        groups.append(group.name)
    return ' '.join(groups)
    group.short_description = 'Group'

and now in your list_display you can have it as this:

list_display = ['username', 'email', 'first_name', 'last_name', 'is_active', 'group']

I hope this works for you

  • This leads to the same error I described above: `django.contrib.admin.sites.AlreadyRegistered: The model User is already registered with 'auth.UserAdmin'.`. – xtlc Nov 25 '20 at 09:30