首页 > 解决方案 > Django:从多个连接表中获取结果

问题描述

我有 3 表浮选有很多轻渣有很多成分。

我想为每个浮选制作一个视图,该视图可以访问轻残基列表和相关成分列表。每次浮选只有 2-3 个轻质残留物,成分相同,因此易于管理。

我可以获得浮选记录及其参考的轻质残留物,但我无法通过 lightresidue_id 来获取成分。[nb 我知道 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,
    })

标签: django

解决方案


您可以通过链接所有lightresidue使用 itertools 的组合来做到这一点。

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可能包含一个或多个对象,因此我在这里分别获取与每个对象相关联的所有对象,compositionslightresidue使用itertools.


推荐阅读