Using Django auth UserAdmin for a custom user model

前端 未结 6 1190
甜味超标
甜味超标 2020-11-30 17:48

From the Django.Contrib.Auth docs:

Extending Django’s default User If you’re entirely happy with Django’s User model and you just w

6条回答
  •  甜味超标
    2020-11-30 17:57

    nico's answer has been extremely helpful but I found Django still references the User model when creating a new user.

    Ticket #19353 references this problem.

    In order to fix it i had to make a few more additions to admin.py

    admin.py:

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from django.contrib.auth.forms import UserChangeForm, UserCreationForm
    from main.models import MyUser
    from django import forms
    
    
    class MyUserChangeForm(UserChangeForm):
        class Meta(UserChangeForm.Meta):
            model = MyUser
    
    
    class MyUserCreationForm(UserCreationForm):
        class Meta(UserCreationForm.Meta):
            model = MyUser
    
        def clean_username(self):
            username = self.cleaned_data['username']
            try:
                MyUser.objects.get(username=username)
            except MyUser.DoesNotExist:
                return username
            raise forms.ValidationError(self.error_messages['duplicate_username'])
    
    
    class MyUserAdmin(UserAdmin):
        form = MyUserChangeForm
        add_form = MyUserCreationForm
        fieldsets = UserAdmin.fieldsets + (
            (None, {'fields': ('extra_field1', 'extra_field2',)}),
        )
    
    admin.site.register(MyUser, MyUserAdmin)
    

提交回复
热议问题