我有3个模型,它们被外键引用,我需要用一些过滤器显示所有OrderDetails数据的报告。在
我还需要包括OrderEntry的日期和Inventory条目的日期。但是当我试图渲染3个查询集时,日期会重复(n)次。在
如何限制只打印循环中的第一个或最后一个匹配项?
在模型.py在
class OEntradaDetalle(models.Model):
oentrada = models.ForeignKey(OEntrada, related_name='orden')
...
class RecepcionOEntrada(models.Model):
oentradadetalle = models.ForeignKey(OEntradaDetalle, related_name='recepciones')
folio = models.CharField(max_length=20)
fecha = models.DateTimeField(auto_now_add=True)
...
class InventarioEntrada(models.Model):
cantidad = models.DecimalField(default=0, decimal_places=2, max_digits=10)
epc = models.CharField(max_length=25, null=True, blank=True)
fecha = models.DateTimeField(auto_now_add=True)
oentrada = models.ForeignKey('OEntrada', blank=True, null=True)
...
在视图.py在
^{pr2}$模板reporteOEFolio.html在
{% for d in detalles %}
<tr>
<td>{{ d.epc }}</td>
...
<td>{% for r in recibidos %}{% if r.oentradadetalle == d %}}{{ r.fecha|date:"SHORT_DATE_FORMAT" }}{% endif %}{% endfor %}</td>
<td>{% for r in recibidos %}{% if r.oentradadetalle == d %}{{ r.fecha|time:"H:i:s" }}{% endif %}{% endfor %}</td>
<td>{% for r in recibidos %}{% if r.oentradadetalle == d %}{{ r.folio }}{% endif %}{% endfor %}</td>
<td>{% for i in inventario %}{% if i.epc == d.epc %}{{ i.fecha|date:"SHORT_DATE_FORMAT" }}{% endif %}{% endfor %}</td>
<td>{% for i in inventario %}{% if i.epc == d.epc %}{{ i.fecha|time:"H:i:s" }}{% endif %}{% endfor %}</td>
</tr>
{% empty %}
实际上,我要做的是先打印OEntradaDetalle对象的数据,然后用for循环查找匹配项,然后打印值。但是,如果该值在queryset中是多次,那么它将打印匹配的次数。在
有没有办法只打印第一个匹配项?像break
?
有没有办法只打印最后一个匹配项?比如重写值?
可能但不重复: django print loop value only once或django print only one value in for loop in template
这个问题有几种可能的答案。最简单的是,您可以引用查询集中的单个项,因此:
如果查询集返回多个相同的值,则可以压缩这些值,从而:
^{pr2}$最后,如果您想迭代关系的“many”端,但是引用了“one”端的一个副本,那么可以使用templatetag重组来达到良好的效果:https://docs.djangoproject.com/en/1.7/ref/templates/builtins/#regroup
相关问题 更多 >
编程相关推荐