Reputation: 155
I am trying to override change model form for adming page but don't know why it doesn't work. Can smb help me please?
My forms.py:
from django import forms
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import User
class CustomUserChangeForm(UserChangeForm):
email = forms.EmailField(required=True, label="Email")
phone = forms.CharField(label="Phone number")
class Meta:
model = User
fields = ("username", "email", "phone", )
My 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 = ['email', 'username', 'phone', ]
admin.site.register(CustomUser, CustomUserAdmin)
My models.py
class CustomUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(_('username'), max_length=30,
unique=True)
first_name = models.CharField(_('first name'), max_length=30,
blank=True)
last_name = models.CharField(_('last name'), max_length=30,
blank=True)
email = models.EmailField(_('email address'), unique=True,
blank=True, null=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$',
message="Phone number must be entered in the
format: '+999999999'. Up to 15 digits allowed.")
phone = models.CharField(_('phone number'), validators=[phone_regex],
max_length=17,
unique=True, blank=True, null=True)
I am trying to override change model form but don't know why it doesn't work. Can smb help me please?
Upvotes: 1
Views: 101
Reputation: 476503
At first sight you used the wrong model in your form: it should be:
from myapp.models import CustomUser
from django.contrib.auth.forms import UserChangeForm
class CustomUserChangeForm(UserChangeForm):
email = forms.EmailField(required=True, label='Email')
phone = forms.CharField(label='Phone number')
class Meta:
model = CustomUser
fields = ('username', 'email', 'phone', )
That being said, since your CustomerUserChangeForm
does not have any fields to change passwords or permissions, you can use a simple ModelForm
[Django-doc]:
from django.forms import ModelForm
from myapp.models import CustomUser
class CustomUserChangeForm(ModelForm):
email = forms.EmailField(required=True, label='Email')
phone = forms.CharField(label='Phone number')
class Meta:
model = CustomUser
fields = ('username', 'email', 'phone', )
Upvotes: 1