Повторяющийся цикл For

#python-3.x #django #for-loop

#python-3.x #django #for-цикл

Вопрос:

У меня есть проект, в котором я использую вложенный цикл for для фильтрации элементов, но результат продолжает повторять элемент, который не должен быть таким. Пожалуйста, где я ошибся?

 def order_list(request):
    orders = Order.objects.all()
    current_user = request.user
    user_list = orders.filter(user=current_user.id)
    success = orders.filter(paid=True)
    fail = orders.filter(paid=False)
    return render(request, 'orders/order/order_list.html', {
        'orders': orders,
        'success': success,
        'fail': fail,
        'user_list':user_list,
        'current_user':current_user,
    })
 

HTML

 {% for ls in orders %}
{% for x in user_list %}
{% for od in success %}
<div class="card mb-3" style="max-width: 540px;">
    <div class="row no-gutters">
        <div class="col-md-3">
            <img alt="product img" class="card-img" src="...">
        </div>
        <div class="col-md-9">
            <div class="card-body" style="position: relative;">
                <h5 class="card-title">Product {{ od.id }}</h5>
                <a href="#" style="position: absolute; top: 5px; right: 5px;">View
                    Details</a>
                <p class="card-text">Transaction ID</p>
                <p class="card-text"><small class="text-muted">Delivered at
                    {{od.reference_id}}</small></p>
            </div>
        </div>
    </div>
</div>
{% endfor %}
{% endfor %}
{% endfor %}
 

фактический результат должен быть таким, как на скриншоте ниже
предполагаемый результат
Но я понимаю это;
результат, который я получаю
Пожалуйста, проверьте изображения
Спасибо.

Комментарии:

1. это потому, что они выполняют итерацию для каждой итерации, вы повторяете все каждый ход for

Ответ №1:

вы делаете много нелогичных вещей, проще поместить все в один контекст:

 def order_list(request):
    template_name = 'orders/order/order_list.html'

    user = request.user

    orders = Order.objects.filter(user=user).filter(paid=True)

    return render(request, template_name, {
        'orders': orders
    })
 

и ваш шаблон будет выглядеть так:

 {% for order in orders %}
    <div class="card mb-3" style="max-width: 540px;">
        <div class="row no-gutters">
            <div class="col-md-3">
                <img alt="product img" class="card-img" src="...">
            </div>
            <div class="col-md-9">
                <div class="card-body" style="position: relative;">
                    <h5 class="card-title">Product {{ order }}</h5>
                    <a href="#" style="position: absolute; top: 5px; right: 5px;">View
                        Details</a>
                    <p class="card-text">Transaction ID</p>
                    <p class="card-text"><small class="text-muted">Delivered at
                        {{ order.reference }}</small></p>
                </div>
            </div>
        </div>
    </div>
{% endfor %}
 

Это поможет вам, вы не добавили свои модели, поэтому я принял данные в соответствии с полями, которые я видел

Комментарии:

1. Большое спасибо за просвещение. Это сработало 🙂