![](/img/trans.png)
[英]Serializing decimal points in Django, getting error: 'ValuesListQuerySet' object has no attribute '_meta'
[英]converting a Django ValuesListQuerySet object to a float
我在 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 來可視化數據)。 任何指針?
參考代碼:
視圖.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()),
})
您應該執行到datetime
時間對象的映射:
dow_queryset = Member.objects.order_by('member_created_time').values_list(
'member_created_time', flat=True
)
hkt = pytz.timezone('Asia/Shanghai')
dt_obj = [hkt.localize(datetime.datetime.fromtimestamp(x)) for x in dow_queryset]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.