【发布时间】:2021-06-18 04:39:21
【问题描述】:
我将时间数据(以纪元时间)保存在 MySQL 数据库中作为IntegerField。我正在做一些数据可视化,我想将订单按小时和一周中的一天显示为条形图,所以我想将这些纪元时间转换为日期时间对象并相应地可视化数据。但是,datetime.datetime.fromtimestamp() 只接受浮点数,我在将我的IntegerField 转换为列表以外的任何内容时遇到问题。 (我也尝试将结果列表转换为浮点数,但得到Type Error: float() argument must be a string or a number)。
我想知道我是否应该继续找到一种方法来在我的views.py 文件中转换我的纪元时间(Django ValuesListQuerySet 对象),或者我是否应该将我的纪元时间作为 JsonResponse 返回并在我的javascript AJAX 调用(我使用charts.js 来可视化数据)。有什么指点吗?
参考代码:
views.py
def charts(request): # pie chart for payment type
dow_queryset = Member.objects.order_by('member_created_time').values_list(
'member_created_time', flat=True) # return only the created time w/o key
dow_queryset = list(dow_queryset) # list is the only native data type i can convert to successfully
dow_queryset = float(dow_queryset) # this just .. doesn't work, lol
print(type(dow_queryset))
hkt = pytz.timezone('Asia/Shanghai')
dt_obj = hkt.localize(datetime.datetime.fromtimestamp(dow_queryset)) # this line doesn't work as datetime.datetime.fromtimestamp() only takes in a float, whereas `dow_queryset` is either a list/ Django ValuesListQuerySet object
"""
data - rides by the hour
"""
hour_count = {}
for obj in dt_obj:
if obj.hour == 0:
hour_count['midnight'] += 1
elif obj.hour < 6:
hour_count['early_morning'] += 1
elif obj.hour < 12:
hour_count['morning'] += 1
elif obj.hour < 19:
hour_count['afternoon'] += 1
else:
hour_count['night'] += 1
"""
data - rides by weekday (bar chart)
"""
weekday_count = {}
for obj in dt_obj:
if obj.weekday() == 0:
weekday_count['monday'] += 1
elif obj.weekday() == 1:
weekday_count['tuesday'] += 1
elif obj.weekday() == 2:
weekday_count['wednesday'] += 1
elif obj.weekday() == 3:
weekday_count['thursday'] += 1
elif obj.weekday() == 4:
weekday_count['friday'] += 1
elif obj.weekday() == 5:
weekday_count['saturday'] += 1
elif obj.weekday() == 6:
weekday_count['tuesday'] += 1
return JsonResponse({
'labels_day' : list(weekday_count.keys()),
'data_day': list(weekday_count.values()),
'labels_hour': list(hour_count.keys()),
'data_hour': list(hour_count.values()),
})
【问题讨论】:
-
只有一个成员?如果有多个,那该怎么办?