如何在Django Chartit图表的xAxis中将yyyy-mm-dd截断为mm-dd?

时间:2018-09-04 13:43:50

标签: python django

我想从x轴日期YYYY中删除YYYY-MM-DD,因为该图表显示在较小的区域。例如,2018-09-04应该是09-04。我不确定是否可以使用任何现有方法,有人可以帮忙吗?

我正在使用Django version 2.0django-chartit 0.2.9Python 3.7.0

def get_block_chart(self):
    blockpivotdata = DataPool(
        series=[{
            'options': {
                'source': Block.objects         
                    .annotate(date=TruncDay('timestamp'))     # Truncate to day and add to select list
                    .values('date')                           # Group By day
                    .annotate(num=Count('hash'))              # Select the count of the grouping
                    .values('date', 'num')                    # select day and num
                    .order_by('date')
            },
            'terms': [
                'date',
                'num'
            ]
        }]
    )

    return Chart(
        datasource=blockpivotdata,
        series_options=[{
            'options': {
                'type': 'line',
                'stacking': False
            },
            'terms': {
                'date': [
                    'num',
                ]
            }
        }],
        chart_options={
            'title': {
                'text': 'Block Count Chart'},
            'xAxis': {
                'title': {
                    'text': 'Date'}},
            'yAxis': {
                'title': {
                    'text': 'Block'}},
            'legend': {
                'enabled': False},
            'credits': {
                'enabled': False}},
    )

enter image description here

1 个答案:

答案 0 :(得分:0)

后来我找到了解决方案,只是想在这里粘贴,以防有人需要。方法是使用objects.raw()并通过SQL查询to_char(timestamp,'MM-dd') as niceday对其进行格式化:

blockpivotdata = DataPool(
    series=[{
        'options': {
            'source': Block.objects.raw("select 1 as hash, to_char(timestamp,'MM-dd') as niceday, "
                                        "max(total_difficulty) as total_difficulty, "
                                        "date(DATE_TRUNC('day', timestamp)) as date, count(hash) as num "
                                        "from blockchain_block "
                                        "group by DATE_TRUNC('day', timestamp),niceday order by date")
        },
        'terms': [
            'niceday',
            'num',
            'total_difficulty',
        ]
    }]
)

注意:我在这里使用PostgreSQL。 这是此解决方案的生动演示:https://grinexplorer.net