我有两个具有外键关系的模型,当我使用 {% for badge in bad_type.badge_set.all %}
循环访问 Badge 对象时,它们按 ID 排序,但是我想要它们根据 Meta
sort_order
或 name
字段排序
class BadgeType(models.Model):
name = models.CharField(max_length=50, unique=True)
class Badge(models.Model):
name = models.CharField(max_length=50, unique=True)
badge_type = models.ForeignKey(BadgeType)
sort_order = models.PositiveIntegerField(blank=True, null=True)
...
class Meta:
order_with_respect_to = 'badge_type'
ordering = ['sort_order', 'name']
在 View 中,我在我的上下文中发送此内容:
@login_required
def list(request):
badge_types = BadgeType.objects.all()
context = {"badge_types": badge_types,}
return render(request, "badges/list.html" , context)
在模板中:
{% for badge_type in badge_types %}
{{badge_type.name}}
{% for badge in badge_type.badge_set.all %}
{{badge.name}}
{% endfor %}
{% endfor %}
但是,在模板中,它们是根据 ID 进行排序的。
最佳答案
您可以使用此模板过滤器: dictsort
{% for badge_type in badge_types|dictsort:"name" %}
{{badge_type.name}}
{% for badge in badge_type.badge_set.all|dictsort:"name" %}
{{badge.name}}
{% endfor %}
{% endfor %}
但是,我认为你的问题是 order-with-respect-to
因为在模型 BadgeType 中,您没有指定顺序。
关于django - 通过模板中的外键访问时如何对 django 查询集进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32730525/