Я скачал пакет django-стран, используя «pip install django-country», и мне нужно включить поле «Страна», которое напоминает выпадающий список со всеми странами в моем проекте django, который использует UserCreationForm.Я планирую создать поле страны и позволить пользователям выбирать страну с ее кодом страны и сделать поле выбора зависимым полем выбора в соответствии с полем номера телефона в моей форме.Единственная проблема, с которой я сталкиваюсь сейчас, - это то, что я скачал пакет стран и, кажется, не могу отобразить поле страны в моей форме.Пожалуйста, скажите мне, какие изменения должны быть внесены в текущий код.
Я написал страну = CountryField () и включил страну в список «полей».Однако, когда я запустил сервер, произошла ошибка с указанием неизвестных полей (стран), указанных для пользователя.
/* views.py */
import phonenumbers
from phonenumbers import carrier
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django_countries.fields import CountryField
from validate_email import validate_email
# from phonenumber_field.formfields import PhoneNumberField
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
# phone_number = PhoneNumberField()
phone_number = forms.CharField(max_length=100)
country = CountryField()
class Meta:
model = User
fields = ['username', 'email', 'phone_number', 'country']
def clean_email(self):
email = self.cleaned_data.get("email")
if not validate_email(email, verify=True):
raise forms.ValidationError("Invalid email")
return email
def clean_phone_number(self):
phone_number = self.cleaned_data.get("phone_number")
z = phonenumbers.parse(phone_number, "SG")
if not phonenumbers.is_valid_number(z):
raise forms.ValidationError("Number not in SG format")
if carrier.name_for_number(z, "en") == '':
raise forms.ValidationError("Please enter a mobile number")
return phonenumbers.format_number(
z, phonenumbers.PhoneNumberFormat.E164)
'''def clean_country(self):
return country'''
/* views.py */
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
# user = form.save()
# phone_number = form.cleaned_data['phone']
# do something with phone number??
user = form.save()
user.refresh_from_db()
phone = form.cleaned_data.get('phone_number')
user.Meta.phone_number = phone
user.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('blog-home')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
Я ожидаю, что форма UserCreationForm моего django будет содержать поле страны, в котором будут указаны все страны наряду с кодом страны.Например, одним из параметров может быть «US +1».