Я использовал международные телефонные номера (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-механизм, чтобы все работало так, как вы хотите. Счастливого кодирования

Вернуться на верх