При выборе одного элемента из <datalist>другой список данных должен открываться в соответствии с выбранным элементом первого списка данных. - PullRequest
0 голосов
/ 29 мая 2019

«Я делаю форму модели запроса. Я уже создал виджет списка данных. Теперь я хочу, чтобы при выборе элемента из списка данных появился еще один список данных на основе элемента, выбранного в первом списке данных».ниже предположим, что я выбрал США, тогда некоторые города США должны появиться в новом списке данных, или, если я выберу Китай, должны появиться некоторые города Китая.

forms.py

from django import forms
from .fields import ListTextWidget

class FormForm(forms.Form):
   data = ('Mexico', 'USA', 'India', 'France')
   char_field_with_list = forms.CharField(required=True)
   char_field_with  = forms.CharField(required=True,widget = ListTextWidget(data_list=data,name='data'))


   def __init__(self, *args, **kwargs):
      _country_list = kwargs.pop('data_list', None)
      super(FormForm, self).__init__(*args, **kwargs)
      self.fields['char_field_with_list'].widget = ListTextWidget(data_list=_country_list, name='country-list')

field.py (где создается виджет) из форм импорта django

class ListTextWidget(forms.TextInput):
    def __init__(self, data_list, name, *args, **kwargs):
        super(ListTextWidget, self).__init__(*args, **kwargs)
        self._name = name
        self._list = data_list
        self.attrs.update({'list':'list__%s' % self._name})

    def render(self, name, value, attrs=None, renderer=None):
        text_html = super(ListTextWidget, self).render(name, value, attrs=attrs)
        data_list = '<datalist id="list__%s">' % self._name
        for item in self._list:
            data_list += '<option value="%s">' % item
        data_list += '</datalist>'

        return (text_html + data_list)

views.py

from django.shortcuts import render

# Create your views here.
from .forms import FormForm

def country_form(request):
    # instead of hardcoding a list you could make a query of a model, as long as
    # it has a __str__() method you should be able to display it.
    country_list = ('Mexico', 'USA', 'China', 'France')
    form = FormForm(data_list=country_list)

    return render(request, 'inquiry/inquiry.html', {
        'form': form
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...