假设我在Django中有两个模型,它们通过一个通用模型相互关联,如下例所示:
class ModelA(models.Model):
f = models.IntegerField()
class ModelX(models.Model):
a = models.ForeignKey(ModelA)
x = models.FloatField()
class ModelY(models.Model):
a = models.ForeignKey(ModelA)
y = models.FloatField()
现在假设我想查询ModelX和ModelY并将两个查询集合并到一个查询集中,其引用等于ModelA。实现这一目标的最佳方法是什么?
我到目前为止所尝试的是使用一个模型构建字典,然后在迭代第二个模型时查找它,但我确定必须有更好的方法吗?
当我构建一个html表并循环遍历查询集时,我通常需要这样做。
m_x = ModelX.objects.all()
d = {}
for m in m_x:
d[m.a] = m.x
m_y = ModelY.objects.all()
for m in m_y:
m.x = d.get(m.a, 0)
然后我会在模板中使用它,如下所示:
<table>
<tr>
<th>F</th>
<th>X</th>
<th>Y</th>
</tr>
{% for item in m_y %}
<tr>
<td>{{ item.a.f }}</td>
<td>{{ item.x }}</td>
<td>{{ item.y }}</td>
</tr>
{% endfor %}
</table>