【问题标题】:Python, django filter by kwargs or list, inclusive outputPython、django 按 kwargs 或列表过滤,包含输出
【发布时间】:2021-09-22 18:16:26
【问题描述】:

我想获取将与确定的 id 列表关联的帐户 ID,目前我按一个确切的 ID 过滤,我想输入各种 ID,以便获得更广泛的结果。

我的代码:

from typing import List
from project import models

def get_followers_ids(system_id) -> List[int]:
    return list(models.Mapper.objects.filter(system_id__id=system_id
    ).values_list('account__id', flat=True))

如果我运行代码,我会得到与主 ID 关联的 Id,输出将是与主 ID 相关的 ID 列表(比如说,“与连接到”):

使用示例:

system_id = 12350
utility_ids = get_followers_ids(system_id)
print(utility_ids)

输出:

 >>> [14338, 14339, 14341, 14343, 14344, 14346, 14347, 14348, 14349, 14350, 14351]

但我想输入更多变量以避免陷入 for 循环,这会很慢,因为它会向服务器发出很多请求。

我想使用的输入是一个列表或类似的,它应该可以一次输入各种参数。

并且输出应该是一个关系列表(对 DB 的请求数量最少),例如

如果id=1[3,4,5,6] 相关

如果id=2[5,6,7,8] 相关

输出应该是[3,4,5,6,7,8]

【问题讨论】:

    标签: python python-3.x django


    【解决方案1】:

    您可以使用Field lookups,在您的情况下使用"In" 查找

    所以:

    # system_ids is now a list
    def get_followers_ids(system_ids) -> List[int]:
        # here add in the end in filter field the "__in"
        return list(models.Mapper.objects.filter(system_id__id__in=system_ids
        ).values_list('account__id', flat=True))
    
    system_ids = [12350, 666]
    utility_ids = get_followers_ids(system_ids)
    print(utility_ids)
    

    【讨论】:

    • 666 哈哈,不是故意的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多