Передать цикл из view.py в шаблон html в Django

Я пытаюсь получить данные в своих моделях «Машины», а затем мне нужно получить дополнительную информацию из другой таблицы, связанной с каждой машиной. Я пробую приведенный ниже код в views.py и отображаю его на указанной html-странице.

def allmachinesLOGO(request):
    machines=Machine.objects.all()
    c = ""
    for m in machines:
        if m.tb_order_set.filter(status = "2").exists():
            c = "2"
        else:
            c = "0"
    
    context  = {'machines':machines,'condition':c}
    return render(request,'pline/machineslogos.html',context)
{% if condition == "2"  %}
            
                    <h4> working</h4>
                    <img class = "btn-circle" style = "width: 15px" src = "{% static 'images/icons/icons8-green-circle-48.png' %}" alt = "image" />
                  {% else %}
                      <h4>stop</h4>
                          {{ condition }}
                    <img class = "btn-circle" style = "width: 15px" src = "{% static 'images/icons/icons8-red-circle-48.png' %}" alt = "image" />
                    {% endif %}

Как правильно передать цикл из views.py в шаблон в Django

Что именно вы хотите отобразить в шаблоне

Manoj Tolagekar 11.11.2022 08:11

Привет, я просто хочу показать, работает ли машина или не работает по статусу, указанному в другой таблице. если статус = 2, то работает, если нет, то показывает, что не работает

ashkan 11.11.2022 08:31

В терминале, когда я печатаю условие, он работает нормально, но когда я перемещаю html, чтобы проверить, равен ли он "2" или нет, всегда пишется 0

ashkan 11.11.2022 08:40

Какова ценность этой строки m.tb_order_set.filter(status = "2").exists() ?

Ankit Tiwari 11.11.2022 08:44

Его помещают в цикл for для каждой записи в таблице, если оператор проверяет, существует ли строка со статусом = 2 или нет, основываясь на том, что она написана как истинная или ложная. поэтому, если это правда, то c равно 2, а если не c = 0

ashkan 11.11.2022 08:49

Можешь поделиться models

Hemal Patel 11.11.2022 10:37

@ashkan попробуйте напечатать на каждой итерации цикла «c», у вас, скорее всего, последний c = 0, поэтому 0.

inquirer 11.11.2022 10:43

@ashkan добавил опцию фильтрации одной строкой: Machine.objects.filter(tb_order__status='2'). Также обновлен код шаблона.

inquirer 12.11.2022 10:16
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
8
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В представлении на каждой итерации цикла я создаю словарь с двумя значениями: «машины», «статус» и помещаю его в список ааа.

Либо удалите строку в представлении (если вы не хотите, чтобы отображались строки со статусом '0'):

else:
     aaa.append({'machines': m, 'status': '0'})

Тогда строка с 'машинами': м, 'статус': '0' не будет записываться.

Возможно есть способ без цикла фильтровать по вторичной модели. Было бы интересно посмотреть, есть ли такой способ.

Просмотры.py

def allmachinesLOGO(request):
    machines = Machine.objects.all()
    aaa = []
    for m in machines:
        if m.tb_order_set.filter(status='2').exists():
            aaa.append({'machines': m, 'status': '2'})
        else:
            aaa.append({'machines': m, 'status': '0'})

    context = {'context': aaa}

    return render(request, 'pline/machineslogos.html', context)

Шаблоны

{% for m in context %}
{% if m.status == '2' %}
<h4> working</h4>
<p>{{ 'machines' }} : {{ m.machines }} {{ 'status' }} : {{ m.status }} </p>
{% else %}
<h4>stop</h4>
<p>{{ 'machines' }} : {{ m.machines }} {{ 'status' }} : {{ m.status }} </p>
{% endif %}
{% endfor %}

Еще один способ. Отфильтровать машину по вторичной модели со статусом = '2'. Чтобы убедиться, что это так, два цикла (внешний перебирает Machine, а внутренний a.tb_order_set.all() и выводит статус в print(stat.status)):

bbb = Machine.objects.filter(tb_order__status='2')#If unique records are needed, then add distinct().
print(bbb)
for a in bbb:
  for stat in a.tb_order_set.all():
     print(stat.status)

Другие вопросы по теме