Как сделать запрос на основе выбранного пользователем варианта из выпадающего списка в Django
Я здесь новичок. В контексте стажировки я должен разработать веб-сайт, на котором пользователь будет иметь возможность выбрать программу, локализацию или тему, которую он хочет визуализировать на тепловой карте.
Для этого я решил использовать Django. Я столкнулся с 2 проблемами :
- Первая: у меня есть база данных mysql, состоящая из 1 таблицы с названиями локаций (подробными во многих колонках) и координатами, и одной таблицы по программам с необработанными данными. Мне нужно найти способ объединить эти две таблицы, но одно название локализации может иметь разные координаты в зависимости от программы. Поэтому мне нужно объединить 2 колонки по таблице (2 колонки из необработанных данных, которые я соединяю с двумя колонками из таблицы с координатами)
На данный момент я думал об использовании new_var = table.objects.annotate но я не могу соединить две новые переменные... Есть ли у вас какие-нибудь идеи ?
- Второе: пользователь должен выбрать локализацию из выпадающего списка, который я могу использовать для фильтрации моей базы данных и отображения карты по его желанию.
На данный момент у меня есть это :
(views.py)
''' def map(request):
m = folium.Map(location=[-17.4889,-149.90017], zoom_start=11, tiles='CartoDB Dark_Matter', control_scale=(True))
if request.method == 'GET':
featured_filter = request.GET.get('site_name')
if request.GET.get('nom_site'):
data_list = table.objects.filter(localisation = featured_filter).values_list('latitude', 'longitude', 'proportion')
else :
data_list = table.objects.all().values_list('latitude', 'longitude', 'proportion')
plugins.HeatMap(data_list).add_to(m)
m = m._repr_html_()
context = {
'm': m,
"showname": name}
return render(request, 'map.html', context)
'''
(map.html)
Выберите участок {% for nom in showname %} {{name.localisation}} {% endfor %}Моя проблема в том, что "featured_filter" - это пустой QuerySet. Так могу ли я получить выбранное значение из html интерфейса в мой код на python ?
Спасибо за помощь!
Я не очень хорошо понимаю, чего именно вы хотите, но я дам вам ряд советов, чтобы посмотреть, смогут ли они вам помочь:
1 - Если вам нужно соединить две таблицы базы данных, вы можете использовать отношения многие-ко-многим (Документация)
2 - Возможно, с этой проблемой лучше столкнуться с помощью формы и метода POST:
- Пользователь выбирает опцию
- Отправьте форму методом POST
- Запустите функцию, выполняющую фильтрацию
- Функция возвращает результат через контекст и повторный рендеринг HTML.
3 - Если вы не хотите использовать формы, вы можете создать пользовательский шаблон тегов и JavaScript. Этот метод более сложный, поэтому я не рекомендую его использовать. ( Пользовательский тег шаблона) (InnerHTML Javascript)