Выдает ошибку input поле django python

ввожу в поле input +79211234569 и выдает ошибку в html Выберите корректный вариант. Вашего варианта нет среди допустимых значений.

данные формы: <'form': <RelatedAddForm bound=True, valid=False, fields=(name;phone)>

request_post <QueryDict: {'csrfmiddlewaretoken': ['m9mKTv4kLWSFmW6Jj39OUAZ0zINBoFjvphjYADWvY97lk1oKAB3LAHhxOpmXnKbo'], 'cli ents-name': ['test'], 'clients-phone': ['+79121234566']}> передает переменную name и переменную phone в правильном формате.

Скорее всего проблема в том, что проверка поля phone связана с ChoiceTxtField?

some_views

request_post = kwargs['request_post']
related_form = RelatedAddForm(request_post, prefix='clients')

forms

class ListTextWidget(forms.Select):
    template_name = 'include/_forms_clients_datalist.html'

    def format_value(self, value):
        # Copied from forms.Input - makes sure value is rendered properly
        if value == '' or value is None:
            print('ListTextWidget None')
            return ''
        if self.is_localized:
            print('ListTextWidget local')
            return formats.localize_input(value)
        return str(value)

class ChoiceTxtField(forms.ModelChoiceField):
    widget=ListTextWidget()

class RelatedAddForm(forms.ModelForm):
    phone = ChoiceTxtField(queryset=Clients.objects.order_by('-phone'))

    class Meta:
        model = Clients
        fields = ['name', 'phone']
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control', 'autocomplete': 'off'}),
        }

models

class Clients(models.Model):
    name = models.CharField(max_length=150, blank=True, verbose_name='Имя')
    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(validators=[phone_regex], unique=True, max_length=17, verbose_name='Телефон')  

    def get_absolute_url(self):
        return reverse('view_clients', kwargs={'pk': self.pk})

    def __str__(self):
        return self.phone

Ответы (1 шт):

Автор решения: JopaBoga

ModelChoiceField предполагает выбор только заранее сохраненной модели (указывается в параметре queryset). Наследовать ModelChoiceField не надо, изменения вносятся на уровне виджета. Поэтому надо заменить его на CharField.

class ListTextWidget(forms.Select):
    template_name = 'include/_forms_clients_datalist.html'

class PhoneInputField(forms.CharField):
    widget=ListTextWidget()

class RelatedAddForm(forms.ModelForm):
    phone = PhoneInputField()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['phone'].choices = Clients.objects.order_by('-phone').values_list('phone')

    class Meta:
        model = Clients
        fields = ['name', 'phone']
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control', 'autocomplete': 'off'}),
        }
→ Ссылка