如何相对于循环的父数据对嵌套的循环中的子数据进行迭代

时间:2019-02-07 02:51:02

标签: django python-3.x

我有一个for循环和一个嵌套的for循环。父项for loop显示该餐的所有成分。每个成分都有我要在“完整”成分下显示的子成分。

下面是这些表的一般概念。我实际上并不是在开发与食品相关的应用,但这只是为了简化操作。

膳食餐桌

+---------+-----------------------+
| mMealID | mMealName             |
+---------+-----------------------+
| 0001    | English Big Breakfast |
+---------+-----------------------+
| ....    | ...                   |
+---------+-----------------------+

成分

+-----------------+-------------------+-----------+
| ingIngredientID | ingIngredientName | ingMealID |
+-----------------+-------------------+-----------+
| 0001            | Bacon             | 0001      |
+-----------------+-------------------+-----------+
| 0002            | Baked Beans       | 0001      |
+-----------------+-------------------+-----------+
| 0003            | Sausage           | 0001      |
+-----------------+-------------------+-----------+
| 0004            | Coffee            | 0001      |
+-----------------+-------------------+-----------+
| ....            | ...               | ....      |
+-----------------+-------------------+-----------+

子成分

+-------------------+---------------------+----------------+----------+
| siSubIngredientID | siSubIngredientName | siIngredientID | siMealID |
+-------------------+---------------------+----------------+----------+
| 0001              | Fat                 | 0001           | 0001     |
+-------------------+---------------------+----------------+----------+
| 0002              | Pork                | 0001           | 0001     |
+-------------------+---------------------+----------------+----------+
| 0003              | Salt                | 0001           | 0001     |
+-------------------+---------------------+----------------+----------+
| 0004              | Tomato Sauce        | 0002           | 0001     |
+-------------------+---------------------+----------------+----------+
| ....              | ...                 | ....           | ....     |
+-------------------+---------------------+----------------+----------+

所需的布局

English Big Breakfast
    Bacon
        Fat
        Pork
        Salt
    Baked Beans
        Beans
        Tomato Sauce
    Sausage
        Pork
        Herbs
        Salt
    Coffee
        Coffee Beans
        Sugar
        Water
        Milk
    etc...

我可以很容易地显示每个完整成分下的所有子成分,但这显然是我不想发生的事情。因为嵌套循环将完成并返回到父循环,显示每个完整成分下的所有子成分,即使该子成分与父成分无关。我将如何编写仅显示与父数据相关的数据的查询/循环?甚至我可以查看的任何文档都可以助您一臂之力。

为所有帮助加油。

如果需要,可以使用一些Django代码:

models.py

    class Meal(models.Model):
        mMealID = models.CharField(db_column='mMealID', max_length=10, primary_key=True)
        # ...

    class Ingredient(models.Model):
        ingMealID =models.ForeignKey('Meal', on_delete=models.PROTECT, db_column='ingMealID')
        ingIngredientID = models.DecimalField(db_column='IngredientID ', max_digits=4, decimal_places=0, primary_key=True)
        # ...

    class SubIngredient(models.Model):
        siMealID =models.ForeignKey('Meal', on_delete=models.PROTECT, db_column='siMealID ')
        siIngredientID = models.ForeignKey('Ingredient', on_delete=models.PROTECT, db_column='siIngredientID ')
        siSubIngredientID = models.IntegerField(db_column='subIngredient', primary_key=True)
        # ...

对模型/数据结构很抱歉,我正在使用一个由儿童设计的旧数据库(超过10年),但这是我必须处理的问题。

template.html

    {% if mealQuery %}
    # ...
        {% for ingMealID in ingredientQuery %}
            <tr>
                ...
                <td>{{ ingMealID.ingredientID }}</td>
                ...
            </tr>
            {% for siMealID in subIngredientQuery %}
                <tr>
                    ...
                    <td>{{ siMealID.siSubIngredientID }}</td>
                    ...
                </tr>
            {% endfor %}
        {% endfor %}
    # ...
    {% endif %}

1 个答案:

答案 0 :(得分:1)

您可以像这样使用Related objects

views.py:

from .models import Meal
from django.shortcuts import render

def your_vew(request):
   meals = Meal.objects.all() 
   return render(request, 'your_html.html', {'meals': meals})

您的html:

{% for meal in meals %} 
   <p> {{ meal.mMealID }} </p>
   {% for in_meal in meal.ingredient_set.all %} 
      <p style="padding-left:20px;"> {{ in_meal.ingIngredientName }} </p>
      {% for sub_in in in_meal.subingredient_set.all %}
         <p style="padding-left:60px;"> {{ sub_in.siSubIngredientName }} </p> 
      {% endfor %} 
   {% endfor %} 
{% endfor %}