【问题标题】:able to return nested dictionary using values? django能够使用值返回嵌套字典? django
【发布时间】:2019-01-09 15:21:48
【问题描述】:

假设我有一个名为 Blog 的模型,这就是该值的工作方式

>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]

但是假设我想把名字变成另一个字典并得到这样的回报

[{'id': 1, 'blog': { 'name': 'Beatles Blog'}}]

上述是否可以通过使用 value 或类似的东西来实现?

我知道我可以做一些可行的事情

[{'id': blog.pk, 'blog': {'name': blog.name}} for blog in blogs]

提前感谢我的好奇心

【问题讨论】:

    标签: python django dictionary


    【解决方案1】:

    使用values 是不可能的。

    您建议的方法效果很好。

    如果您的模型上有很多额外的字段,并且只需要这两个,那么性能改进将是首先使用值仅加载您需要的字段,然后对它们执行列表推导以按照您指定的方式重新格式化.

    这样可以避免不必要地查询数据库中不需要的字段。

    【讨论】:

    • 实际上 values() 不会将数据加载到内存中,它会返回一个 QuerySet 对象,类似于 sql 语句。直到您遍历查询集(在本例中为 for blog in blogs 部分),才会执行查询并加载数据。水malooooooone
    • @stackPusher 你是对的。我已经更新了答案,删除了不正确的信息。
    • @WaterMalone 知道了,谢谢你的信息,这真的很有帮助。但是我想知道上面提到的query is not executed until we iterate over the queryset,你是说在我做for blog in blogs之类的事情之前它不会命中数据库?
    • @Dora 是的,没错。我的观点是,如果你只指定你需要的字段子集,这将是一个更有效的数据库查询。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2013-11-30
    • 2020-02-17
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多