临时for循环中的Django print first匹配值

2024-10-03 11:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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 oncedjango print only one value in for loop in template


Tags: intrueformodelifmodelsclasstd
1条回答
网友
1楼 · 发布于 2024-10-03 11:23:18

这个问题有几种可能的答案。最简单的是,您可以引用查询集中的单个项,因此:

qset[0]

如果查询集返回多个相同的值,则可以压缩这些值,从而:

^{pr2}$

最后,如果您想迭代关系的“many”端,但是引用了“one”端的一个副本,那么可以使用templatetag重组来达到良好的效果:https://docs.djangoproject.com/en/1.7/ref/templates/builtins/#regroup

相关问题 更多 >