我有两种模式:
class Stop(models.Model):
line = models.ForeignKey(TransitLine, related_name='stops')
name = models.CharField(max_length=32)
approved_ts = models.DateTimeField(null=True, blank=True)
class TransitLine(models.Model):
name = models.CharField(max_length=32)
desc = models.CharField(max_length=64)
我有一个查询集:
Stop.objects.filter(approved_ts__isnull=False)
但是,当我将此查询的结果发送到模板时,我希望它按TransitLine
分组。我该如何处理?
为了澄清,最后,我希望模板看起来像这样:
<ul>
{% for tl in transit_line_list %}
<li>
{{ tl.name }}:
{% for s in tl.stops.all %}
{{ s.name }}
{% endfor %}
</li>
{% endfor %}
</ul>
答案 0 :(得分:1)
在模板中,您可以使用regroup ...
在使用
过滤查询集时,必须通过TransitLine进行排序Stop.objects.filter(approved_ts__isnull=False).order_by('line')
您可以查看文档......
答案 1 :(得分:0)
如果我理解正确,您应该只为模板提供TranslitLine
s的查询集。不是创建Stop
的查询集,而是向approved_stops()
类添加TransitLine
方法,如下所示:
class TransitLine(models.Model):
name = models.CharField(max_length=32)
desc = models.CharField(max_length=64)
def approved_stops(self):
return self.stops.filter(approved_ts__isnull=False)
然后将'transit_line_list': TransitLine.objects.all()
添加到模板的上下文中,并将模板中的{% for s in tl.stops.all %}
更改为{% for s in tl.approved_stops.all %}
。
答案 2 :(得分:0)
执行以下操作:
TransitLine.objects.filter(stops__in=Stops.objects.filter(approved_ts=True)).distinct().order_by('name')
此查询仅选择已批准停靠的行。
JFYI:要查找有任何停靠点的行,请执行
TransitLine.objects.exclude(stops__id=None).order_by('name')