django - 通过模板中的外键访问时如何对 django 查询集进行排序

标签 django django-models django-templates

我有两个具有外键关系的模型,当我使用 {% for badge in bad_type.badge_set.all %} 循环访问 Badge 对象时,它们按 ID 排序,但是我想要它们根据 Meta

sort_ordername 字段排序
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/

相关文章:

python - 使用 Django 1.7+ 和数据迁移加载初始数据

Python:字典中的元素顺序

python - django 查询中的 sql "LIKE"等效项

django - 如何在 Django block 中包含模板标签

python - 检查一个值是否等于 Django 模板中另一个数字的模

python - 以这种格式显示数字列表django

mysql - Django 2.0 - 使用转储数据中的固定装置进行测试给出 utf8mb4 编码错误

站点根页面的 Django 和 Nginx try_files 403

django - 禁止直接分配给相关集合的背面。改用addresses.set()

python - 在模型级别将 Django DateField 验证为一周中的特定日期的最佳做法是什么?