Crawley
Crawley

Reputation: 640

How do I add an extra field in Django Admin?

I'm just starting out with Django and I've just revamped my project so that instead of using the base user, I use an AbstractUser model, as defined in my models.py folder

#accounts/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # add additional fields in here
    favourite_colour = models.CharField("Favourite Colour", max_length=100)

    def __str__(self):
        return self.email

I've also created the creation forms that work well with my signup system

#accounts/forms.py

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

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = ('username', 'email', 'favourite_colour')

        help_texts = {
                    'username': 'Make something unique',
                    'email': None,
                    }

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email', 'favourite_colour')

And now I am trying to edit the admin page so that I can change a users favourite_colour attribute. So far I have this in my admin.py file

#accounts/admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['username', 'email', 'favourite_colour']

admin.site.register(CustomUser, CustomUserAdmin)

Which shows me the favourite_colour of each user enter image description here

My question is, how do I make a field to edit this CustomUser attribute once you've clicked on a user?, for example like this enter image description here I'd welcome any help at all as I'm not too good at reading the docs. Please ask if you need more code adding to the question, I've never asked a Django question before

Upvotes: 6

Views: 13386

Answers (1)

Crawley
Crawley

Reputation: 640

After some more looking I found a fieldsets option (link1, link2, link3) that can be used inside of my CustomUserAdmin code. In my CustomUserAdmin class I now have:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['username', 'email', 'favourite_colour']

    fieldsets = UserAdmin.fieldsets + (
            ('Extra Fields', {'fields': ('favourite_colour',)}),
    )

Upvotes: 16

Related Questions