Как я могу создать сгруппированный набор элементов для сгруппированных переключателей

Как я могу создать набор элементов для размещения в представлениях?

ГРУППОВЫЕ ВЫБОРЫ

У меня есть список элементов.

zzz = [m1-x, m2-x] - количество повторений названия каждой группы - количество элементов в группе xxx = [m1,m1, m1, m1, m2, m2 ] - все названия групп, которые должны принадлежать элементам выбора. sss = [q, w, e, r, t, y] - элементы выбора

vvv = [('q', 'qq), ('w', 'ww'), ('e', 'e'),('r', 'rr), ('t', 't'), ('y', 'y')]

[ -- m1-- {{{ ('q', 'qq), ('w', 'ww'), ('e', 'e'),('r', 'rr) }}} , --m2 _BOS_{{ ('т', 'т'), ('у', 'ы') }}} ] Примерно так я бы хотел сгруппировать

но списки всегда будут разными - динамическими.

Я взял это из chatgpt. но я пока не знаю, как создать такой набор элементов.

GROUPED_CHOICES = [
    ('Fruits', [
        ('apple', 'Apple'),
        ('banana', 'Banana'),
    ]),
    ('Vegetables', [
        ('carrot', 'Carrot'),
        ('lettuce', 'Lettuce'),
    ]), ]
<время работы/>
from django import forms

class FoodForm(forms.Form):
    food = forms.ChoiceField(
        choices=GROUPED_CHOICES,
        widget=forms.RadioSelect
    )
<время работы/>
{% for group_label, group_choices in form.food.field.choices %}
    <fieldset>
        <legend>{{ group_label }}</legend>
        {% for choice_value, choice_label in group_choices %}
            {# Get the radio input manually using the field's id_for_label logic #}
            {% with field_id=form.food.auto_id %}
                {% set widget_id = field_id|string + '_' + choice_value %}
            {% endwith %}
            <label for="{{ widget_id }}">
                <input type="radio" name="{{ form.food.name }}"
                       value="{{ choice_value }}"
                       id="{{ widget_id }}"
                       {% if form.food.value == choice_value %}checked{% endif %}>
                {{ choice_label }}
            </label><br>
        {% endfor %}
    </fieldset>
{% endfor %}

Вы не указали четкий формат ваших входных данных. Я предполагаю, что у вас уже есть списки "zzz" и "vvv" в качестве входных данных. Поскольку для zzz= [m1-4, m2-2] неясно, в каком формате он находится, я разделю его на 2 отдельных списка.

GROUPED_choices = []

group_names = ['m1','m2']
repetitions = [4,2]
vvv = [('q', 'q'), ('w', 'w'), ('e', 'e'),('r', 'r'), ('t', 't'), ('y', 'y')]

for index in range(len(repetitions)):
    choice_list = []
    counter = 0
    while counter<repetitions[index]:
        choice_list.append(vvv[counter])
        counter+=1
    GROUPED_choices.append((group_names[index], choice_list))

print(GROUPED_choices)

Это должно дать вам результат в виде [('m1', [('q', 'q'), ('w', 'w'), ('e', 'e'), ('r', 'r')]), ('m2', [('q', 'q'), ('w', 'w')])]

Используйте это для динамического построения GROUPED_CHOICES:

```python
from collections import defaultdict

xxx = ['m1', 'm1', 'm1', 'm1', 'm2', 'm2']
sss = ['q', 'w', 'e', 'r', 't', 'y']
vvv = list(zip(sss, sss))

grouped = defaultdict(list)
for g, c in zip(xxx, vvv):
    grouped[g].append(c)

GROUPED_CHOICES = list(grouped.items())
```

Пример вывода:

python     [         ('m1', [('q', 'q'), ('w', 'w'), ('e', 'e'), ('r', 'r')]),         ('m2', [('t', 't'), ('y', 'y')])     ]     

Используется в форме Django:

python     forms.ChoiceField(choices=GROUPED_CHOICES)     

CMIIW

Вернуться на верх