-
-
Save wsvincent/8c9ba957c29d35faa65d15a89c88600c to your computer and use it in GitHub Desktop.
| # users/admin.py | |
| from django.contrib import admin | |
| from django.contrib.auth import get_user_model | |
| 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 = ['email', 'username',] | |
| admin.site.register(CustomUser, CustomUserAdmin) |
| # users/forms.py | |
| from django import forms | |
| from django.contrib.auth.forms import UserCreationForm, UserChangeForm | |
| from .models import CustomUser | |
| class CustomUserCreationForm(UserCreationForm): | |
| class Meta(UserCreationForm): | |
| model = CustomUser | |
| fields = ('username', 'email') | |
| class CustomUserChangeForm(UserChangeForm): | |
| class Meta: | |
| model = CustomUser | |
| fields = ('username', 'email') |
| # users/models.py | |
| from django.contrib.auth.models import AbstractUser | |
| from django.db import models | |
| class CustomUser(AbstractUser): | |
| # add additional fields in here |
| 1. Start a new Django project: `django-admin startproject new_project .` | |
| 2. Create a `users` app: `python manage.py startapp users` | |
| 3. Update `new_project/settings.py`, `users/models.py`, `users/forms.py`, `users/admin.py` | |
| 4. `python manage.py makemigrations users` | |
| 5. `python manage.py migrate` |
| # new_project/settings.py | |
| INSTALLED_APPS = [ | |
| 'django.contrib.admin', | |
| 'django.contrib.auth', | |
| 'django.contrib.contenttypes', | |
| 'django.contrib.sessions', | |
| 'django.contrib.messages', | |
| 'django.contrib.staticfiles', | |
| # Local | |
| 'users.apps.UsersConfig', # new | |
| ] | |
| ... | |
| AUTH_USER_MODEL = 'users.CustomUser' # new |
One thing that really hung me up was why my custom fields like 'photo' or 'relationship' wasn't showing in admin. After some searching I found something like the below to resolve the issue.
sources: https://stackoverflow.com/questions/15012235/using-django-auth-useradmin-for-a-custom-user-model, https://stackoverflow.com/questions/1437991/django-admin-fieldsets/1485005
class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm form = CustomUserChangeForm model = CustomUser list_display = ["username", "email", "photo"] # Fieldsets fieldsets = UserAdmin.fieldsets + ( ("Profile Image", { "fields": ("photo",) }), ("Relationships", { "fields": ("relationship",) }), ) add_fieldsets = ( (None, {"classes": ("wide",), "fields": ("username", "email", "photo")}), ) admin.site.register(CustomUser, CustomUserAdmin)
After spending 4 hours I finally made it work. If you follow the Vincent's instructions and you admin page throws error please check your Python version. There was a bug with Python 3.7.0 where /admin/login get stuck in the look referring back to itself. https://code.djangoproject.com/ticket/31067