Динамическое создание объектов из набора данных
У меня есть queryset данных Категория и Маркер. Мне нужно добавить маркер в категорию, а категорию на слой карты. Один слой на карте - одна категория.
current_map = folium.Map(location=(0, 0), zoom_start=6)
# a layer marker will be placed in
layer_1 = folium.FeatureGroup(name="Category name 1").add_to(current_map)
c = Category.object.all()
markers = Marker.objects.all()
for marker in markers:
folium.Marker(
location=(marker.latitude, marker.longitude),
popup=folium.Popup(html=popup_html(marker), max_width=280, max_height=320),
icon=folium.Icon(
color=marker.category.color,
icon=marker.category.icon.name,
prefix="fa",
),
tooltip=marker.category.name,
).add_to(layer_1)
Этот код рабочий, но подходит для малого кол-ва категорий, но если их будет 100+, то придется делать что-то такое:
layer_1 = folium.FeatureGroup(name="Category name 1").add_to(current_map)
layer_2 = folium.FeatureGroup(name="Category name 2").add_to(current_map)
...
layer_99 = folium.FeatureGroup(name="Category name 99").add_to(current_map)
for marker in markers:
folium.Marker(
# code omitted
tooltip=marker.category.name,
).add_to(
# if layer_n.layer_name == marker.category.name than add this marker to layer_n
)
Я делал таким подходом, но это не работает как нужно - только последний маркер присваивается категории.
def layer(name, to):
return folium.FeatureGroup(name=name).add_to(to)
for marker in markers:
folium.Marker(
# code omitted
tooltip=marker.category.name,
).add_to(layer(marker.category.name, current_map))
Как сделать верно без дублирования кода?