Найти - Пользователи
Полная версия: Помогите отфильтровать поля из БД (Python, Django)
Начало » Python для новичков » Помогите отфильтровать поля из БД (Python, Django)
1
vpotd
python=3.7.4
django=1.11.25
mysqlclient=1.4.6
OS=windows

Здравствуйте, только начинаю изучать python и пытаюсь вывести модели оборудования по производителям в выпадающем списке, не могу нормально отфильтровать. 
Делаю на django. Хочу сформировать переменную “switches” и чтобы она была равна:

 <optgroup label="Eltex">
    <option id ="switch-1">2428</option>
</optgroup>
<optgroup label="Eltex">
    <option id ="switch-2">2328</option>
</optgroup>
<optgroup label="TP-Link">
    <option id ="switch-3">T2600</option>
</optgroup>
<optgroup label="Huawei">
    <option id ="switch-4">S5320-28P-LI-AC</option>
</optgroup>


где “switch-1..4” - это поле id каждой записи в таблице БД


Есть таблица в БД “gen_modelswitch” (модель “ModelSwitch”) и в ней поля:
“id” - id
“vendor” - производитель
“model” - модель


И есть значения:
id  vendor    model
1    Eltex      2428
2    Eltex      2328
3   TP-Link   T2600
4   Huawei   S5320


Буду очень благодарен любой помощи и подсказке.

Есть кусок чего я смог сделать:
     vendors = []
    models = []
    for i in range(1, int(ModelSwitch.objects.filter().count()) + 1):   
        vendor = ModelSwitch.objects.get(id=i).vendor
        model = ModelSwitch.objects.get(id=i).model
        i += 1
        if vendor not in vendors:
            vendors.append(vendor)
        if model not in models:
            models.append(model)
    print(vendors)
    print(models)
Вывод:
 ['Eltex', 'TP-Link']
['2428', 'T2600G-28TS-AC', '2000']
А дальше я не знаю что с этим делать
Romissevd
делай render
 returt render(request, 'example.html', {vendors: ['Eltex', 'TP-Link']})
vpotd
Рендерить я умею. Мне нужен вывод не как у меня уже получился, а как в первом блоке кода. Чтобы я мог эту готовую переменную {{ switches }} воткнуть в html шаблон. Чтобы у меня автоматически обновлялся выпадающий список, в зависимости от количества переменных в таблице с коммутаторами.
vpotd
Нужен такой динамический вывод. Допустим я удалил из таблицы хуавей и чтобы моя переменная тоже поменяла своё значение. Чтобы было не 4 записи а 3.

  <optgroup label="Eltex">
    <option id ="switch-1">2428</option>
</optgroup>
<optgroup label="Eltex">
    <option id ="switch-2">2328</option>
</optgroup>
<optgroup label="TP-Link">
    <option id ="switch-3">T2600</option>
</optgroup>
vpotd
Я делаю returt render(request, ‘example.html’, {switches: switches})
Вставляю {{ switches }} в html шаблон и у меня там должно появиться то что в прошлом посту
Romissevd
сформируй свои данные таким образом
 switches = [{vendors: 'Eltex', models: ['2428']}, {vendors: 'TP-Link', models: ['T2600G-28TS-AC', '2000']}]
а в шаблоне так
 {% for switch in switches  %}
    {% for model in switch.models %}
         <optgroup label={{ switch.vendors }}>
             <option id ="switch-2">{{ model }}</option>
         </optgroup>
    {% endfor %}
{% endfor %}
vpotd
Romissevd
а в шаблоне так

Шаблон то что нужно. Можете ещё подсказать, как переменную switches автоматически из бд вытянуть, а не задавать вручную?
vpotd
Вот что у меня уже есть



switch_gen.html
 <select class="custom-select" id="model">
    <option selected="1">Выберите модель..</option>
    {% if switches.count > 0 %}
        {% for switch in switches %}
            <optgroup label="{{ switch.vendor }}">
            <option id="model-{{ switch.id }}">{{ switch.model }}</option>
            </optgroup>
        {% endfor %}
    {% endif %}
</select>

views.py
 def switch_gen(request):
    session_key = request.session.session_key
    if not session_key:
        request.session.cycle_key()
    print("Session key: " + request.session.session_key)
    all_models = ModelSwitch.objects.all()
    vendors = []
    models = []
    for i in range(1, int(ModelSwitch.objects.filter().count()) + 1):   
        vendor = ModelSwitch.objects.get(id=i).vendor
        model = ModelSwitch.objects.get(id=i).model
        i += 1
        if vendor not in vendors:
            vendors.append(vendor)
        if model not in models:
            models.append(model)
    switches = ModelSwitch.objects.all()
    return render(request, 'switch_gen.html', {'all_models': all_models, 'switches': switches})

Мне нужно чтобы производители не повторялись, а просто модели добавлялись к уже существующему производителю. Помогите пожалуйста.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB