我想将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 :)