Как отобразить объекты, сгруппированные по внешнему ключу - PullRequest
1 голос
/ 31 марта 2011

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

2 голосов
/ 31 марта 2011

Я думаю, что вы ищете 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 голосов
/ 31 марта 2011

Простой:

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