在为循环嵌套的django模板中重置forloop计数器
如何在django模板中重置forloop计数器 这是我当前的查询集:在为循环嵌套的django模板中重置forloop计数器,django,Django,如何在django模板中重置forloop计数器 这是我当前的查询集: context['major'] = Major.objects.all().filter(is_active=True).order_by('id') context['minor'] = Minor.objects.all().filter(is_active=True).order_by('id') 这是我的模型: class Major(models.Model): major_name = models.
context['major'] = Major.objects.all().filter(is_active=True).order_by('id')
context['minor'] = Minor.objects.all().filter(is_active=True).order_by('id')
这是我的模型:
class Major(models.Model):
major_name = models.CharField(max_length=100, default='', null=False)
is_active = models.BooleanField(default=True, null=False)
def __str__(self):
return self.major_name
class Minor(models.Model):
major_name = models.ForeignKey(Major, on_delete=models.CASCADE)
minor_name = models.CharField(max_length=100, default='', null=False)
is_active = models.BooleanField(default=True, null=False)
def __str__(self):
return self.minor_name
所以我有这样的想法:
{% for major in majors %}
{% for minor in minors %}
{% if minor.major_name == major %}
{{forloop.counter}} {{minor}}
{% endif %}
{% endfor %}
{% endfor %}
电流输出:
major1
1 minor1
2 minor2
major2
3 minor3
4 minor4
5 minor5
...
我希望它显示如下内容:
major1
1 minor1
2 minor2
major2
1 minor3
2 minor4
3 minor5
...
您试图实现的似乎是显示所有与
Major
实例相关的Minor
实例,并对其进行筛选和索引
您可以将一个对象传递给,以向反向关系的相关查询集(major.Minor\u set
)添加一个筛选器,然后在该查询集上循环,而不是一次又一次地循环所有已筛选的Minor
实例
context['majors'] = Major.objects.filter(
is_active=True
).prefetch_related(
Prefetch('minor_set', queryset=Minor.objects.filter(is_active=True).order_by('id'))
).order_by('id')
然后在模板中
{% for major in majors %}
{% for minor in major.minor_set.all %}
{{ forloop.counter }} {{ minor }}
{% endif %}
{% endfor %}
你能把
专业
和次要
模型和查询集添加到你的问题中吗?更改定义或迭代数据的方式可能会更容易,因为“重置”forloop计数器(如您所问)并非琐碎/可能会导致我的查询集。我还尝试在模板内添加{%with%}标记,但我认为我无法使用标记增加变量。您也可以添加模型吗?也添加了它…谢谢您的回复。我得到了一个错误minor\u set'是一个在实现后预取\u related()
的无效参数。django指向major in majors。minor
->major
外键是否与您的问题中描述的完全相同?它没有相关的\u名称
,因此反向关系必须命名为minor\u set
?minor->Major ForeignKey yes。但是没有相关的名字。使用你的模型在本地运行测试对我来说很好。完整的错误消息是什么?它是否以开头在主要对象上找不到“次要设置”
?