Queryset转List

发布时间:2023-05-17

一、从List转Integer

将List转换为Integer与QuerySet无关,但是在一些QuyerySet处理中,我们需要将返回结果中的List转换为Integer,常见的场景如统计List长度、List中数值之和等。 下面给出一个示例代码:

# 将List中的元素相加
num_list = [1, 2, 3, 4, 5]
num_sum = sum(num_list)
print(num_sum)

上面代码通过sum函数将List中的全部元素相加得到num_sum。

二、从List转Tree

在一些数据处理操作中,我们需要将返回的List转换为Tree类型的数据结构,常见的场景如分类目录展示、组织架构展示等。 下面给出一个示例代码:

class Node:
    def __init__(self, value):
        self.value = value
        self.children = []
    def add_child(self, obj):
        self.children.append(obj)
def list_to_tree(org_list):
    root_node = None
    node_dict = {}
    for node_data in org_list:
        node = Node(node_data["value"])
        node_dict[node_data["id"]] = node
        if not node_data["parent_id"]:
            root_node = node
        else:
            parent = node_dict[node_data["parent_id"]]
            parent.add_child(node)
    return root_node
org_list = [
    {"id": 1, "value": "A", "parent_id": None},
    {"id": 2, "value": "B", "parent_id": 1},
    {"id": 3, "value": "C", "parent_id": 1},
    {"id": 4, "value": "D", "parent_id": 2},
    {"id": 5, "value": "E", "parent_id": 2},
    {"id": 6, "value": "F", "parent_id": 3},
]
tree = list_to_tree(org_list)

上面代码通过自定义Node类和list_to_tree函数将List转换为Tree类型。

三、问卷翻译

在一些多语言场景下,我们需要将QuerySet返回的结果中的文本翻译成多种语言,并且转换成List格式,比如问卷翻译。 下面给出一个示例代码:

from googletrans import Translator
translator = Translator()
class Question:
    def __init__(self, title, options):
        self.title = title
        self.options = options
def translate_question(q):
    title = translator.translate(q.title, dest="zh-cn").text
    options = [translator.translate(opt, dest="zh-cn").text for opt in q.options]
    return Question(title, options)
qs = Question.objects.all()
translated_q_list = [translate_question(q) for q in qs]

上面代码通过googletrans库将Question对象中的title和options翻译成中文,并且将结果存储在Question对象中。