【问题标题】:Django - queryset output formattingDjango - 查询集输出格式
【发布时间】:2018-07-31 10:27:25
【问题描述】:

我是 Django 的新手,遇到了以下问题:我有一个模型 FundPrice 存储特定基金的每日价格。我想从数据库中检索它并传递给基于 js 的图表。

views.py

from django.shortcuts import render
from fundmgmt.models import FundPrice

def fund_details_cards(request):
    fp = list(FundPrice.objects.values('fund_id','value_date','price'))

return render(request,"fundmgmt/fund_detail_cards.html",
              {'fund_prices': fp})

在我的模板中,通过使用{{ fund_prices }} 引用,我得到的结果如下:

[{'fund_id': 1, 'value_date': datetime.date(2016, 11, 9), 'price': Decimal('2.574557')}, 
 {'fund_id': 1, 'value_date': datetime.date(2016, 11, 8), 'price': Decimal('2.572507')}, 
 {'fund_id': 1, 'value_date': datetime.date(2016, 11, 7), 'price': Decimal('2.571724')}]

我能以某种方式格式化这个输出吗?例如。摆脱这些datetime.date(Decimal( 字段类型指示符?

我要打印的内容如下:

[{'fund_id': 1, 'value_date': '2016-11-09', 'price': '2.574557'}, 
 {'fund_id': 1, 'value_date': '2016-11-08', 'price': '2.572507'}, 
 {'fund_id': 1, 'value_date': '2016-11-07', 'price': '2.571724'}]

【问题讨论】:

  • 你应该在这里使用序列化器:docs.djangoproject.com/en/2.0/topics/serialization/…
  • 您是在 Django 模板中寻找格式,还是在 JavaScript 中序列化为 JSON?
  • 确实,这个想法是我为 JavaScript 传递数据来创建图表,在这种特殊情况下使用 morris.js。

标签: python django templates model


【解决方案1】:

您可以简单地使用Cast 函数将表达式的结果类型强制为来自 output_field 的类型。

在您的情况下,您会将value_dateprice 字段都转换为CharField

from django.db.models import CharField
from django.db.models.functions import Cast
from django.shortcuts import render

from fundmgmt.models import FundPrice


def fund_details_cards(request):
    fp = list(FundPrice.objects.values('fund_id',
                                       value_date=Cast('value_date', CharField()),
                                       price=Cast('price', CharField())))

    return render(request,"fundmgmt/fund_detail_cards.html",
                  {'fund_prices': fp})

【讨论】:

  • 它似乎不起作用.. 返回 ValueError:异常值:注释 'value_date' 与模型上的字段冲突。
  • 它使用以下语法:values_list(Cast('value_date', CharField()), flat=True))
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2014-08-05
  • 2013-03-30
  • 2021-04-23
  • 2021-07-15
  • 2019-02-26
  • 1970-01-01
相关资源
最近更新 更多