Динамическая форма Django для множественного выбора - PullRequest
0 голосов
/ 02 мая 2018

У меня есть приложение Django, в котором я прошу пользователей выбирать из нескольких вариантов выбора городов в HTML-шаблоне. Выбор городов основан на разных экземплярах городов в таблице базы данных. Поскольку общее количество городов превышает 100, я хотел бы вместо этого дать пользователю возможность выбрать все города (чтобы им не приходилось выбирать более 100 городов вручную) или выбрать отдельные города, используя множественный выбор, если они хотят подмножество 100+ городов. Как я могу реализовать это в Django?

Вот мой код того, что я сейчас делаю:

forms.py

 class FilterCityForm(forms.Form):
    q = listing.objects.all().values('Address_locality').distinct().order_by('Address_locality')
    CITY_CHOICES = [[x['Address_locality'],x['Address_locality']] for x in q]
    city = forms.MultipleChoiceField(choices=CITY_CHOICES, required=True, widget=forms.SelectMultiple(attrs={'size':'30'}))

views.py

def main_select_cities(request):
    form = FilterCityForm(request.POST or None)
    city_list = dict()
    if form.is_valid():
        city_list = form.cleaned_data.get("city")
        return process_cities(request, city_list)

    context = {
        'form': form,
        'city_list': city_list,
    }
    return render(request, "0_select_cities.html", context)

Шаблон

{% block content %}

<div class='container'>
    <div class='row'>

        <div class='col-sm-6'>
            <br><br>

        <h4>Select all the cities for which you would like to view listings</h4>    

                <form method='POST' action=''> {% csrf_token %}
                    {{form.as_p}}
                    <input class='btn btn-primary btn-lg' type='submit' value='Show listings'/>

                </form>
                <br>
                <i> use ctrl or shift + click to select multiple options</i>
        </div>  

    </div>
</div> 

{% endblock %}
...