Я сейчас пишу форму ввода страны / территории. Вы знаете, что-то вроде этого:

Я действительно не нашел другого хорошего способа сделать это, так что вот что я делаю. Я использую django-countries
и просто выполняю цикл for в своем шаблоне, чтобы вывести все страны в HTML:
def myview(request):
from django_countries import countries
return direct_to_template(request, "template.html", { "countries": countries.COUNTRIES })
{% for country in countries %}
<option value="{{country.0}}">{{country.1}}</option>
{% endfor %}
Теперь самое сложное. Я бы хотел использовать как можно больше преимуществ встроенных элементов управления, поэтому я собираюсь сделать что-то вроде этого:
{% for country in territory_countries %}
<optgroup label="{{country.0}}">
{% for territory in country.1 %}
<option value="{{territory.0}}">{{territory.1}}</option>
{% endfor %}
</optgroup>
{% endfor %}
Ясно, как грязь, верно?
Первый COUNTRIES
список выглядит так:
COUNTRIES = (
('US', 'United States'),
)
Мне бы хотелось что-то похожее на это:
TERRITORIES = (
('US',
('AL', 'Alabama'),
('AK', 'Alaska'),
),
)
Это не должно выглядеть точно так, но было бы неплохо, если бы я мог вписать это в свой дизайн.
Я ошибаюсь? Есть ли лучший, умный способ сделать это? Есть ли модуль Django, который намного умнее и использует реальные модели в базе данных?
Было бы гораздо приятнее:
countries = Country.objects.all()
<select id="countries">
{% for country in countries %}
<option value="{{country.abbr}}">{{country.name}}</option>
{% endfor %}
</select>
<select id="territories">
{% for country in countries %}
{% if country.territories %}
<optgroup label="{{country.abbr}}">
{% for territory in country.territories %}
<option value="{{territory.abbr}}">{{territory.name}}</option>
{% endfor %}
</optgroup>
{% endif %}
{% endfor %}
</select>
Есть что-нибудь, что может мне помочь с этим? Должен ли я просто сказать «черт с ним» и собрать модуль Django, чтобы делать то, что я хочу?