2011-03-31 27 views
1

我是django n00b,並且在如何操作時遺失。如何顯示按外鍵分組的對象

樣品型號:

class Food_Type(models.Model): 
    name = models.CharField(max_length=200) 

class Food(models.Model): 
    name = models.CharField(max_length=200) 
    food_type = models.ForeignKey(Food_Type) 

和一些數據:

v = Food_Type(name='Veggie') 
f = Food_Type(name='Fruit') 

c = Food(food_type=v, name='carrot') 
a = Food(food_type=f, name='apple') 

的HTML輸出應該是這個樣子:

素食
胡蘿蔔

水果
蘋果


  • 我不確定做分組正確的方式,我假設的觀點,而不是模板。

    food_type_list = Food_Type.objects.all().order_by('name') 
    food_list = [] 
    for ft in food_type_list: 
        food_list.append(Food.objects.filter(fruit_type__exact=device_type.id) 
    render_to_response(some_template, 
        {'food_type': food_type_list, 'foods': food_list} 
    ) 
    
  • 根據我的看法,我不確定如何顯示

不工作,也一定是一個更好的辦法

{% for type in food_type %} 
    {{ type }} 
    {% for food in foods %} 
    {% if food.food_type == type %} 
     {{ food.name }} 
    {% endif %} 
    {% endfor %} 
{% endfor %} 

回答

2

我認爲你正在尋找regroup

food = Food.objects.all() 

{% regroup food by food_type as food_list %} 

<ul> 
{% for food_type in food_list %} 
    <li>{{ food_type.grouper }} 
    <ul> 
     {% for item in food_type.list %} 
     <li>{{ item }}</li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 
+0

我在找什麼,謝謝! – hewsonism 2011-03-31 14:51:59

0

簡單:

Food.objects.order_by('food_type__name') 
+0

@ bradley-ayers,我糾正了我的問題。我在提交表單時遇到了一些麻煩。現在問題顯示正確。 order_by將對查詢結果進行排序,但我需要基於food_type的單獨結果集。 – hewsonism 2011-03-31 01:19:34

+0

看看'ifchanged' templatetag http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#ifchanged – 2011-03-31 01:24:00