Reputation: 333
I am trying to add some extra fields in default user model. But the new fields is not showing up in admin page. Here are the models of 'users' app.
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
q1 = models.TextField()
q2 = models.TextField()
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreation(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = CustomUser
fields = ('username', 'email', 'q1', 'q2')
class CustomUserChange(UserChangeForm):
class Meta:
model = CustomUser
fields = ('username', 'email', 'q1', 'q2')
admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreation, CustomUserChange
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreation
form = CustomUserChange
list_display = ['email', 'username', 'password', 'q1', 'q2']
model = CustomUser
admin.site.register(CustomUser, CustomUserAdmin)
P.S. I have added AUTH_USER_MODEL = users.CustomUser
in settings.py
Upvotes: 1
Views: 834
Reputation: 343
You can just create a user profile model with a OneToOne relation and fire it up using signal whenever a user has been added without having to touch the User model.
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
class Profile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
q1 = models.TextField()
q2 = models.TextField()
def __unicode__(self):
return self.user.q1
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
user_profile = Profile(user=user)
user_profile.save()
post_save.connect(create_profile, sender=User)
Upvotes: 0
Reputation: 1810
In your admin.py file you need to override UserAdmin
as:
class CustomUserAdmin(BaseUserAdmin):
form = CustomUserChange
add_form = CustomUserCreation
list_display = ('email', 'username', 'password', 'q1', 'q2')
fields = ('email', 'username', 'password', 'q1', 'q2')
model = CustomUser
admin.site.register(CustomUser, UserAdmin)
Check this example in the docs for more understanding link
Upvotes: 1
Reputation: 3707
Please check the following things into your django project.
AUTH_USER_MODEL = 'users.models.CustomUser'
to your settings.py
file ?Ensure you have added q1
and q2
to your fields
attribute in CustomUserAdmin
as follow:
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreation
form = CustomUserChange
list_display = ['email', 'username', 'password', 'q1', 'q2']
fields = ['email', 'username', 'password', 'q1', 'q2']
model = CustomUser
Upvotes: 0