Динамическое создание объектов из набора данных

У меня есть 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))

Как сделать верно без дублирования кода?


Ответы (0 шт):