2015-09-23 17 views
1

我有两个具有外键关系的模型,当我通过{% for badge in badge_type.badge_set.all %}循环显示徽章对象时,它们按ID排序,但我希望它们按sort_order排序或name场,每Meta如何在通过模板中的外键访问时对django查询集进行排序

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'] 

视图,我在我的情况下发送此:

@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进行排序。

回答

1

您可以使用此模板过滤器: 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,你不指定顺序。

+0

我将如何指定'BadgeType'中Badge对象的排序? – 43Tesseracts

+1

你为什么不去掉order_with_respect_to? –

相关问题