【问题标题】:How to display objects grouped by foreign key如何显示按外键分组的对象
【发布时间】:2011-03-31 00:49:53
【问题描述】:

我是 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 %}

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    我想你在找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>
    

    【讨论】:

      【解决方案2】:

      简单:

      Food.objects.order_by('food_type__name')
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2018-10-06
      • 2022-01-08
      相关资源
      最近更新 更多