Django Admin использует неправильный UserManager
Я создал пользовательский класс пользователя:
class User(AbstractUser):
objects = UserDashManager()
custom_field = models.CharField(max_length=84)
И UserManager
для заполнения этого поля при создании:
class UserDashManager(UserManager):
def create_user(self, username, email, password, **extra_fields):
extra_fields.setdefault('custom_field', 'custom field value')
extra_fields.setdefault('is_staff', False)
extra_fields.setdefault('is_superuser', False)
return self._create_user(username, email, password, **extra_fields)
Я зарегистрировал User
в admin.py
:
class CustomAdmin(UserAdmin):
model = User
list_display = ['username', 'email', 'first_name', 'last_name','is_staff','custom_field']
# Register your models here
admin.site.register(User, CustomAdmin)
Но если я использую страницу администратора http://127.0.0.1:8000/admin/my_app/user/add/
, то пользовательское поле пустует.
Я выполнил миграцию, поэтому поле находится в базе данных. Если я создаю пользователя в оболочке django, то поле заполняется, но не со страницы администратора. Есть ли что-то еще, что мне нужно зарегистрировать? Нужно ли мне создать пользовательскую форму?
Как заставить администратора сайта использовать правильный UserManager?
Я заменил форму, которую использует админ Django, наследуя от UserCreationForm
from django.contrib.auth.forms import UserCreationForm, UsernameField
from .models import User
class UserDashCreationForm(UserCreationForm):
class Meta:
model = User
fields = ("username",)
field_classes = {"username": UsernameField}
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password1"])
user.custom_field = 'custom field value'
if commit:
user.save()
return user
Затем в файле admin.py я изменил CustomAdmin
на ссылку на эту форму:
class CustomAdmin(UserAdmin):
model = User
list_display = ['username', 'email', 'first_name', 'last_name','is_staff','custom_field']
add_form = UserDashCreationForm