从查询集中获取字典

问题描述 投票:0回答:3

我有下面的查询,我想获取“specs”,它是一个字典,但 envi_dict 的类型是一个 Queryset 类。如何从此查询集中获取字典?任何帮助深表感谢。

envi_dict = Environment.objects.values('specs')

结果

<QuerySet [({u'CPU Model': u'Dell', u'RAM': 1000, u'CPU': 400},), ({u'CPU Model': u'Dell', u'RAM': 1000, u'CPU': 400},)]>, <class 'django.db.models.query.QuerySet'>, )

我尝试了

Environment.objects.filter(title=item.title).values('specs')
Environment.objects.get('specs')
,但我仍然得到一个查询集。

编辑:下面是

models.py

class CommonModel(models.Model):

    author = models.ForeignKey('auth.User',)
    title = models.CharField(max_length=400)
    comments = models.TextField(blank=True)
    requirements = JSONField(default = {})
    specs = JSONField(default= {})
    created_date = models.DateTimeField(default=timezone.now)
    updated_date = models.DateTimeField(blank=True, null=True)

    class Meta:
       abstract = True

    def update(self):
        self.updated_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

class Estimate(CommonModel):

    gp_code = models.TextField(default='Unknown')
    inputs = models.TextField(blank=True)
    ...
    def __str__(self):
        return self.title

class Environment(CommonModel):

    estimate = models.ForeignKey(Estimate,related_name='environments')
    logic = PythonCodeField(blank=True, null=True)
    ...
django django-queryset
3个回答
11
投票

通过迭代所有环境模型实例,构建一个以 model instance.title 作为键、specs 作为值的字典列表。

[{i.title: i.specs} for i in Environment.objects.all()]

2
投票

使用 Django model_to_dict

  • 如果您需要将
    single queryset
    转换为字典,请使用
    model_to_dict
  • 如果您需要将
    all querysets
    转换为字典,请使用
    Model.objects.values()
    django.core.serializer

使用 model_to_dict

from django.forms.models import model_to_dict
 
qs = Environment.objects.filter(title=item.title)
 
if qs.exists():
  qs_dict = model_to_dict(qs) # {id:1,'estimate':'some-estimate-data','logic':'some-logic-data'}
  # Do something here with qs_dict
else:
  # qs=None -- do some here when qs is not found
 

0
投票

来自

QuerySet.values()
的文档:

当用作迭代时,

values
方法返回一个返回字典的 QuerySet,而不是模型实例。

这样想:

a

QuerySet
模型实例的列表。

QuerySet.values()
模型实例列表转换为字典列表。

要回答您的问题,您可以将

QuerySet
转换为字典列表,如下所示:

queryset = Environment.objects.filter(title='some title')

print(list(queryset))
# [<Environment 1>, Environment 2>, Environment 3>]

print(list(queryset.values())
# [{'id': 1, 'specs': '1'}, {'id': 2, 'specs': '2'}, {'id': 3, 'specs': '3'}]
© www.soinside.com 2019 - 2024. All rights reserved.