шаблон django как бороться с моделями с фк в шаблоне - PullRequest
0 голосов
/ 30 декабря 2011

Мне нужно отобразить некоторые данные из БД.Мне нужно отобразить OrderItem и все связанные OrderProperties (с FK) В представлении я делаю что-то вроде:

orderitems = OrderItem.objects.all().filter(order=order)
properties = []
for item in orderitems:
    a = OrderItemDetail.objects.all().filter(orderitem=item)
    b = []
    for x in a:
        c = [x.detail.property.name, x.detail.value, x.detail.price, x.detail.detail_price_unit]
    b.append(c)
 properties.append(b)

В конце у меня есть список свойств, которые мне нужны, а затем в шаблоне, который я используюих:

 # orderitems loop - displaying item detail
 # displaying the properties
 {% for prop in properties %}
     {% for x in prop %}
          <big><b>{{x.0}}</b>: {{x.1}} (+{{x.2}}
          {% if x.3 == "m" %}
          &euro;/MQ
          {% endif %}
          {% if x.3 == "p" %}
          %
          {% else %}
          &euro;
          {% endif %}
          )</big><br />
      {% endfor %}
 {% endfor %}

Это должно привести к выводу вроде: color: red (+0,0 € ) Все работает нормально, но когда есть 2 или более элементов порядка, я получаю каждое свойство, напечатанное в каждой записи (я хотел бы отобразить только связанные свойствак текущему элементу)

Было бы довольно легко, если бы я мог выполнить запрос в цикле (извлекая только те свойства, которые мне нужно отобразить в этом цикле цикла).Да, я мог бы создать html-элемент в python, но поскольку я использую шаблонизатор, он кажется довольно идиотским.

Знаете ли вы, как это сделать?

PS.я знаю, что имена переменных не имеют смысла, но мне нужно что-то короткое во время тестирования

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Если я правильно понимаю, вам нужно это.

В поле зрения:

orderitems = OrderItem.objects.all().filter(order=order)

Это шаблон:

{% for order in orderitems %}
   {% for detail in order.orderitemdetail_set.all %}
      {{ detail.property.name }}... etc
   {% endfor %}
{% endfor%}
0 голосов
/ 30 декабря 2011

Я не уверен на 100%, но я думаю, что вы, возможно, ищете функциональность related_name .

Используя это, вам не понадобятся все дерьмо в вашем представлении,и ваш шаблон будет выглядеть примерно так:

{% for item in order.orderitem_set.all %}
    <!-- Print some stuff about the item -->

    {% for item_detail in item.orderitemdetail_set.all %}
        <!-- Do stuff with your item details -->
    {% endfor %}
{% endfor %}
...