Я использовал международные телефонные номера (intlTelInput) в моем приложении django, но похоже, что форма не сохраняет номер.
Итак, я в основном использовал плагин intl-tel-input в своей регистрационной форме. Мой webapp сделан на django. Но каждый раз, когда я отправляю форму, я получаю ошибку, которая выглядит так, как будто поле phone_number является обязательным, хотя я заполнил номер. Похоже, что форма не сохраняет данные о номере телефона. Как я могу решить эту проблему?
temlplate формы выглядит следующим образом:
forms.py:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import AbstractBaseUser
from .models import *
from django.core.exceptions import ValidationError
class RegForm(UserCreationForm):
name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'username'}))
email = forms.EmailField(widget=forms.EmailInput(attrs={'placeholder': 'Enter your name', 'id':'email', 'name':'email'}))
address = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Enter your District, Subcounty, Village' ,'id':"location"}))
nin = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Enter your NIN', 'id':"NIN",'name':"nin"}))
LC1_letter = forms.FileField(widget=forms.FileInput(attrs={'name':'upload'}))
National_Id = forms.FileField(widget=forms.FileInput())
def __init__(self, *args, **kwargs):
super(RegForm, self).__init__(*args, **kwargs)
for fieldname in ['LC1_letter', 'nin','password1', 'password2']:
self.fields[fieldname].help_text = None
class Meta:
model = Account
fields = ['email', 'name', 'address', 'phone_number', 'LC1_letter', 'nin', 'National_Id', 'password1', 'password2']
и views.py:
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from accounts.forms import RegForm
from django.contrib.auth import login, authenticate
from .models import *
from django.contrib import messages
from django.core.files.storage import FileSystemStorage
# Create your views here.
def register(request):
if request.method == "POST":
form = RegForm(request.POST, request.FILES)
if form.is_valid():
upload = request.FILES['upload']
fss = FileSystemStorage()
file = fss.save(upload.name, upload)
file_url = fss.url(file)
form.save()
return render(request,'main_app/base.html', {'file_url': file_url})
else:
print('Form is not valid')
print(form.errors)
else:
form = RegForm()
return render(request, 'accounts/register.html', {'form': form})
hello, пожалуйста, можете ли вы показать возвращаемую ошибку? Но пока что я не вижу ни поля с названием phone, определенного в вашей форме, ни элемента '#phone', определенного в вашем html
okey Я вижу, что вы указали 'phone_number' вашей модели для использования в вашей форме, но на стороне клиента (html) вы не включили это поле в вашу форму, поэтому при отправке формы django пытается очистить и проверить форму на основе записей полей, затем поле 'phone_number' не найдено в post ваших данных (потому что нет поля с именем phone_number), поэтому возвращается ошибка, возможно, они могли бы вернуть сообщение типа ('поле ******** определено в классе вашей формы, но вы не представили его здесь').
Чтобы избавиться от этой ошибки, вы можете :
1- определите поле на стороне клиента следующим образом :
{{form.phone_number|as_crispy_field}}
2- или как :
<input id="id_phone_number" type="text" name="phone_number" />
Как вы видите, во втором случае имя поля 'phone_number', а не просто 'phone', как вы определили его в своем шаблоне .
Теперь в зависимости от этого вы можете выяснить, как сделать js-механизм, чтобы все работало так, как вы хотите. Счастливого кодирования