我需要显示来自数据库的一些数据。 我需要显示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" %}
€/MQ
{% endif %}
{% if x.3 == "p" %}
%
{% else %}
€
{% endif %}
)</big><br />
{% endfor %}
{% endfor %}
这应该产生如下输出:color: red (+0,0 € )
一切正常,但当有2个或更多的订单时,我会在每个记录中打印每个属性(我只想显示与当前项目相关的属性)
如果我可以在循环中执行查询(仅检索我需要在该循环周期中显示的属性),这将非常容易。是的,我可以在python中创建html元素,但由于我使用的是模板引擎,所以它看起来很白痴。
你知道怎么办?
PS。我知道变量名称没有意义但我在测试时需要一些简短的东西
答案 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 %}