我有一个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 %}
答案 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 %}