【问题标题】:Django: Return list of dicts for values_list?Django:返回values_list的字典列表?
【发布时间】:2011-09-18 07:29:03
【问题描述】:

我有这个查询:

cities = ShippingPrice.objects.filter(city1__name__icontains=request.REQUEST.get('city','')).values_list('city1__id','city1__name').order_by('city1__name').distinct()

返回列表列表。我可以写.values_list('city1__id','city1__name')而不是这样做会很好:

.values_list({'id':'city1__id','name':'city1__name'})

它会返回一个字典列表,比如

[{'id':4135,'name':'Seattle'},{'id':4154,'name':'Vancouver'}]

是否有任何现有的方法可以做到这一点?


我正在查看 Django 源代码,但我不知道如何覆盖它:

def values_list(self, *fields, **kwargs):
    flat = kwargs.pop('flat', False)
    if kwargs:
        raise TypeError('Unexpected keyword arguments to values_list: %s'
                % (kwargs.keys(),))
    if flat and len(fields) > 1:
        raise TypeError("'flat' is not valid when values_list is called with more than one field.")
    return self._clone(klass=ValuesListQuerySet, setup=True, flat=flat,
            _fields=fields)

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    为什么不首先使用values()

    【讨论】:

    • 我习惯使用values_list,我忘记了values实际上做了什么……哈哈。但是,我还是更愿意重命名这些字段。 city1__name 不是很好的键。
    • 通过dict() 中的genex 重新映射很容易。
    • 嗯?然后我必须创建另一个字典映射{'city1__name':'name'} 并做一些疯狂的逻辑来转换它......这似乎比使用values_list 并通过[dict(zip(keys,values)) for values in values_list] 传递它更冗长
    • 太简单了,不会计算。
    猜你喜欢
    • 2011-07-09
    • 2012-01-25
    • 2016-09-05
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2021-01-31
    相关资源
    最近更新 更多