【问题标题】:Django Queryset to dict for use in jsonDjango Queryset 到 dict 以在 json 中使用
【发布时间】:2012-05-17 03:28:16
【问题描述】:

我有以下查询集:

prices = Price.objects.filter(product=product).values_list('price', 'valid_from')

我怎样才能得到“json”的价格

{"aaData": [
    ["70.1700", "2007-01-01"], # price, valid_form
    ["72.6500", "2008-01-01"], # price, valid_form
    ["74.5500", "2009-01-01"], # price, valid_form
    ["76.6500", "2010-01-01"]
]}

【问题讨论】:

    标签: django


    【解决方案1】:

    更好的方法是使用DjangoJSONEncoder。它支持Decimal

    import json
    from django.core.serializers.json import DjangoJSONEncoder
    
    prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
    
    prices_json = json.dumps(list(prices), cls=DjangoJSONEncoder)
    

    非常易于使用。无需为将单个字段转换为float而费尽心思。

    更新:将答案更改为使用内置 json 而不是 simplejson。

    【讨论】:

    • 请注意...从 Django 1.5 开始,django.utils.simplejson 的使用已被弃用。请参阅release notes 了解更多信息。
    • 按照所示示例:一旦我有prices_json,我如何将它传递给模板/js?以及如何从那里访问它?
    【解决方案2】:
    from django.utils import simplejson
    
    prices = Price.objects.filter(product=product).values_list('price', 'valid_from')
    simplejson.dumps({'aaData': prices})
    

    编辑

    您的问题并不清楚priceDecimalField。看来您需要从 Decimal 转换为 float

    simplejson.dumps({'aaData': (float(price), valid_from) for price, valid_from in prices})
    

    或者,如果您希望价格为字符串:

    simplejson.dumps({'aaData': (str(price), valid_from) for price, valid_from in prices})
    

    【讨论】:

    • 错误:Decimal('70.1700') 不是 JSON 可序列化的
    猜你喜欢
    • 2020-03-15
    • 2020-11-04
    • 2012-06-01
    • 1970-01-01
    • 2013-05-25
    • 2017-10-19
    • 2021-08-13
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多