开发者

How to display objects grouped by foreign key

I'm a django n00b and am lost on how to do this.

sample models:

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)  

And some data:

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

c = Food(food_type=v, name='carrot')  
a = Food(food_type=f, name=开发者_StackOverflow'apple')  

The HTML output should look something like this:

Veggie

carrot

Fruit

apple


  • I'm uncertain of the right way to do the grouping, I assume the view and not the template.

    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}
    )
    
  • based on my view, I'm uncertain how to display

Does not work and there has got to be a better way

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


I think you are looking for 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>


Simple:

Food.objects.order_by('food_type__name')
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜