将QuerySet转换为字典而不使用Python进行迭代



我想将QuerySet对象中的某些字段存储到python对象(例如dictionary(中,但我想知道是否可以在不循环的情况下做到这一点,至少在python中是显式的?

例如,如果QuerySet的内容如下:

>> queryset.values_list('parents', 'children', 'x', 'y')
>> [('parent1', 'child1', 1.1, 1.03), ('parent1', 'child2', 1.4, 1.05), ('parent2', 'child1', 0.1, 0.2), ('parent2', 'child2', 1.3, 2.2)]

现在,我想把这个翻译成一本字典。字典的实际结构是次要的,只要所有信息都包含在内。例如:

d = {
'child1': {
'parent1' : [1.1, 1.03], 
'parent2' : [0.1, 0.2], 
...
}
# or
d = {
'parent1': {
'child1': [1.1, 1.03], 
'child2': [1.4, 1.05]
...
}
# or even: 
d = {
'child1': [
# parent1   # parent2
(1.1, 1.03), (0.1, 0.2)
]
...
}

当然,如果我在Python中循环查询集,我可以做到这一点,但真的有必要执行显式for循环吗?有没有一种方法可以直接从查询集填充字典,类似于list(queryset)为您提供列表的方式?

我最担心的是,如果我需要检索数以万计的类似条目,for循环在性能方面不会很好地扩展。我知道可能的迭代是不可避免的,但至少我想明确地避免这样做。

我在网上找到的所有东西都显示了如何通过在Python中迭代查询集来实现这一点,这对我来说很清楚,但我想知道是否还有其他可能更高性能的方法。

使用序列化程序:

from rest_framework import serializers
class SomeModelSerializer(serializers.ModelSerializer):
class Meta:
model = SomeModel
fields = "__all__"
SomeModelSerializer(instance).data

返回

{'auto_now_add': '2018-12-20T21:34:29.494827Z',
'foreign_key': 2,
'id': 1,
'many_to_many': [2],
'normal_value': 1,
'readonly_value': 2}

我认为这个解决方案有很好的性能。I trust Django REST Framework team :)

相关内容

  • 没有找到相关文章

最新更新