2011-03-31 32 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