Django:从多个联接表中获取结果

时间:2019-03-02 12:22:45

标签: django

我有3桌浮选,有许多轻渣油,有很多成分。

我想为每个浮选创建一个视图,该视图可以访问轻质残渣列表和相关成分列表。每次浮选中只有2-3个轻质残渣,而且组成也相同,因此易于管理。

我可以获得浮选记录及其参考的轻渣油,但是我在传递lightresidue_id来获取组成方面遇到困难。 [n.b.我知道lightresidue.id是Django的处理方式,但我选择这种方式]

视图代码如下,我已经为有效的lightresidue.lightresidue_id = 17进行了硬编码,但是如何用lightresidue.lightresidue_id = composition.lightresidue_id代替它。

def botanyoverview(request, flotation_id):
    flotation = get_object_or_404(Flotation, pk=flotation_id)
    lightresidue = LightResidue.objects.filter(flotation_id__flotation_id=flotation_id)
    # composition = Composition.objects.filter(lightresidue.lightresidue_id)
    composition = Composition.objects.filter(lightresidue_id=17)
    return render(request, 'dashboard/botanyoverview.html',
    {
        'flotation':flotation,
        'lightresidue':lightresidue,
        'composition':composition,
    })

1 个答案:

答案 0 :(得分:0)

您可以通过使用itertools链接所有lightresidue的组成来实现。

from itertools import chain

def botanyoverview(request, flotation_id):
    flotation = get_object_or_404(Flotation, pk=flotation_id)
    lightresidue = LightResidue.objects.filter(flotation_id__flotation_id=flotation_id)
    queryset = []
    for i in lightresidue:
        queryset += Composition.objects.filter(lightresidue_id = i.lightresidue_id)

    composition = chain.from_iterable(queryset)
    return render(request, 'dashboard/botanyoverview.html',
    {
        'flotation':flotation,
        'lightresidue':lightresidue,
        'composition':composition,
    })

lightresidue可能包含一个或多个对象,因此在这里我将与每个compositions分别关联的所有lightresidue并使用itertools进行组合。