django模板如何在模板中处理带有fk的模型

时间:2011-12-30 10:55:29

标签: django django-admin django-templates

我需要显示来自数据库的一些数据。 我需要显示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个或更多的订单时,我会在每个记录中打印每个属性(我只想显示与当前项目相关的属性)

如果我可以在循环中执行查询(仅检索我需要在该循环周期中显示的属性),这将非常容易。是的,我可以在python中创建html元素,但由于我使用的是模板引擎,所以它看起来很白痴。

你知道怎么办?

PS。我知道变量名称没有意义但我在测试时需要一些简短的东西

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你需要这个。

在视图中:

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

它模板:

{% for order in orderitems %}
   {% for detail in order.orderitemdetail_set.all %}
      {{ detail.property.name }}... etc
   {% endfor %}
{% endfor%}

答案 1 :(得分:0)

我不是百分百肯定,但我认为您可能正在寻找related_name functionality

使用它,你不需要视图中的所有垃圾,你的模板看起来像这样:

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