jul
jul

Reputation: 37474

How to add fields in extended UserAdmin

I'm trying to create custom user models with their own admins (add and change forms). I'd like to have exactly the same as the original User admin with just the additional fields in the add and change forms.

Anybody could help?

models.py

from django.contrib.auth.models import User

class MyUser1(User):
    #add more fields specific to MyUser1

class MyUser2(User):
    #add more fields specific to MyUser2

admin.py

from django.contrib.auth.admin import UserAdmin

class MyUser1Admin(UserAdmin):
    # how can I add the "fields specific to MyUser1" both in the add
    # and the change forms?

admin.site.register(MyUser1, MyUser1Admin)


# same for MyUser2

Upvotes: 1

Views: 1571

Answers (2)

jul
jul

Reputation: 37474

I had to extend the UserCreationForm and UserChangeForm:

admin.py

from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.admin import UserAdmin
from django.contrib import admin
from django import forms

class MyUser1CreationForm(UserCreationForm):
    myuser1_field = forms.CharField()

    class Meta:
        model = User
        fields = ("username", "myuser1_field", "password1", "password2")

class MyUser1ChangeForm(UserChangeForm):
    myuser1_field = forms.CharField()

    class Meta:
        model = User

class MyUser1Admin(UserAdmin):

    form = MyUser1ChangeForm
    add_form = MyUser1CreationForm

    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        (_('Personal info'), {'fields': ('myuser1_field', 'first_name', 'last_name', 'email')}),
        (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                       'groups', 'user_permissions')}),
        (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )


    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'myuser1_field', 'password1', 'password2')}
        ),
    )


admin.site.register(MyUser1, MyUser1Admin)

Upvotes: 2

Sergey Lyapustin
Sergey Lyapustin

Reputation: 1937

from django.contrib.auth.forms import UserChangeForm

class MyUser1AdminForm(UserChangeForm):

    class Meta:
        model = MyUser1

Upvotes: 0

Related Questions