Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add an extra field in Django Admin?

Tags:

python

django

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

like image 532
Crawley Avatar asked Aug 21 '18 19:08

Crawley


People also ask

Can I add field in user model Django?

According to django documentation, you should create a custom user model whenver you start a django project. Because then you will have full control over the fields of the user objects in django, and you can add as many custom fields to the user model as you need and whenever you need.


1 Answers

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',)}),
    )
like image 157
Crawley Avatar answered Sep 26 '22 06:09

Crawley