html не может отобразить кулак для-l oop результат, django - PullRequest
0 голосов
/ 18 февраля 2020

Я новичок в django, я хотел бы отобразить мой view.py для индекса. html,

view.py:

def index(request):
context_dict = {}

customers = Customer.objects.all()
carts = Cart.objects.select_related('customer')
goods = Good.objects.select_related('cart__customer')

context_dict['Cart']=carts
context_dict['Good']=goods
context_dict['Customer'] = customers

return render(request, 'index.html', context=context_dict)

и index. html для l oop выглядит следующим образом:

<ul>
            {% for customer in Customer %}
                <li>{{ customer.name }}</li>
                {% for cart in Cart %}
                    {% if customer.id == cart.id %}
                        {% for good in Good %}
                            {% if cart.id == good.id %}
                                {{good.name}}--{{good.count}}--{{good.price}}
                            {% endif %}
                        {% endfor %}
                    {% endif %}
                {% endfor %}
            {% endfor %}

        </ul>

, но результат отображается так:

result

Боб должен иметь воду - 2--50 под ним. кажется customer.id == cart.id не может соответствовать. но я не знаю как это исправить. пожалуйста, помогите, большое спасибо!

1 Ответ

1 голос
/ 18 февраля 2020
  1. customer.id должно соответствовать card.customer_id и т. Д. (cart.good_id == good.id)
  2. , если у вас есть одна корзина с одним товаром, ваше решение все равно вернет всех клиентов, чтобы все товары отображались одной строкой на странице - это не очень хорошее решение.

Поэтому попробуйте использовать объединения и получить только необходимые данные, например:

actual_carts = Cart.objects.all().select_related('customer', 'good').order_by('customer_id', )

Это вернет только клиентов и товары, указанные в корзинах. select_related позволит вам получить доступ ко всей необходимой информации с customers, а также с goods.

...