2015-09-23 15 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? –

相關問題