Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2019 18:57:04

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

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']
А дальше я не знаю что с этим делать

Отредактировано vpotd (Дек. 27, 2019 19:12:50)

Офлайн

#2 Дек. 27, 2019 20:05:56

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

делай render

 returt render(request, 'example.html', {vendors: ['Eltex', 'TP-Link']})

Офлайн

#3 Дек. 27, 2019 20:22:26

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

Рендерить я умею. Мне нужен вывод не как у меня уже получился, а как в первом блоке кода. Чтобы я мог эту готовую переменную {{ switches }} воткнуть в html шаблон. Чтобы у меня автоматически обновлялся выпадающий список, в зависимости от количества переменных в таблице с коммутаторами.

Отредактировано vpotd (Дек. 27, 2019 20:31:11)

Офлайн

#4 Дек. 27, 2019 20:24:26

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

Нужен такой динамический вывод. Допустим я удалил из таблицы хуавей и чтобы моя переменная тоже поменяла своё значение. Чтобы было не 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 (Дек. 27, 2019 20:38:08)

Офлайн

#5 Дек. 27, 2019 20:36:55

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

Я делаю returt render(request, ‘example.html’, {switches: switches})
Вставляю {{ switches }} в html шаблон и у меня там должно появиться то что в прошлом посту

Офлайн

#6 Дек. 27, 2019 21:04:42

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

сформируй свои данные таким образом

 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 %}

Офлайн

#7 Дек. 27, 2019 21:15:38

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

Romissevd
а в шаблоне так

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

Отредактировано vpotd (Дек. 27, 2019 21:16:40)

Офлайн

#8 Дек. 28, 2019 11:58:01

vpotd
От: Казань
Зарегистрирован: 2019-12-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите отфильтровать поля из БД (Python, Django)

Вот что у меня уже есть



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})

Мне нужно чтобы производители не повторялись, а просто модели добавлялись к уже существующему производителю. Помогите пожалуйста.

Отредактировано vpotd (Дек. 28, 2019 12:00:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version