I have been trying to add a phone number field in UserCreationForm so that on registration a user gives its phone number but unfortunately phone number is not storing. it accepts the Phone number on the registration page but it doesn't show the phone number on the webpage. I think it is not storing.
forms.py
class myCreateForm(UserCreationForm):
ph= forms.CharField(max_length=400, required=True, label='Phone')
class Meta:
model = User
fields = ['first_name', 'last_name' ,'username', 'email', 'password1', 'password2','ph']
def save(self, commit=True):
user = super(myCreateForm, self).save(commit=False)
user.ph = self.cleaned_data["ph"]
if commit:
user.save()
return user
views.py
def register(request):
form = myCreateForm()
if request.method == "POST":
form = myCreateForm(request.POST)
if form.is_valid():
form.save()
return redirect('loginPage')
return render(request , 'register.html', {'form' : form})
template
{%for i in user%}
Hi {{i.first_name}}<br>
Username : {{i.username}}<br>
E-Mail : {{i.email}}<br>
Phone : {{i.ph}}<br>
{%endfor%}
but on my webpage, it shows everything except phone number.
Please Help Me Out
You need to extend the Django User model.See the Docs.
For example let's create a new model Profile
which will have OneToOne
relation with django user model
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phone = models.CharField(max_length=50..)
Now in your view
form = myCreateForm(request.POST)
if form.is_valid():
user = form.save()
phone = form.cleaned_data.get('ph')
Profile.objects.create(user=user,phone=ph)
return redirect...
Now in the template {{i.profile.phone}}
will give the result for phone field.