我想导出csv文件但输出对象名称为什么?我不知道如何解决它?
这是我的出口结果:
No Name Day AttTime LeaveTime
<staffprofile.views.kintaiLog object at 0x7f955bdbd650> <staffprofile.views.kintaiLog object at 0x7f955bdbd6d0> <staffprofile.views.kintaiLog object at 0x7f955bdbd710>
<staffprofile.views.kintaiLog object at 0x7f955bdbd810> <staffprofile.views.kintaiLog object at 0x7f955bdbd8d0> <staffprofile.views.kintaiLog object at 0x7f955bdbd950>
<staffprofile.views.kintaiLog object at 0x7f955bdbd910> <staffprofile.views.kintaiLog object at s.kintaiLog object at 0x7f955bdbd9d0> <staffprofile.views.kintaiLog object at 0x7f955bdbda10>
但我想导出正确的结果是这样的:
No Name Day AttTime LeaveTime
1 AA 2014/4/1 11:00 20:00
1 AA 2014/4/3 13:00 None
1 AA 2014/4/4 None 21:09
1 AA 2014/4/9 13:45 23:04
5 BB 2014/5/4 10:10 19:14
6 BB 2014/5/5 10:10 19:14
7 BB 2014/5/6 10:10 19:14
但是以下代码结果不正确: 这是我的views.py:
class kintaiLog(object):
def __init__(self, name, day, attTime, leaveTime):
self.name = name
self.day = day
self.attTime = attTime
self.leaveTime = leaveTime
def dt2s(dtime):
if dtime is None:
return "None"
else:
return '%02d:%02d:%02d' % (dtime.hour, dtime.minute, dtime.second)
def export_excel(request):
response = HttpResponse(mimetype='application/vnd.ms-excel; charset="Shift_JIS"')
response['Content-Disposition'] = 'attachment; filename=file.csv'
writer = csv.writer(response)
titles = ["No","name","day","AttTime", "leaveTime"]
writer.writerow(titles)
obj_all = attendance.objects.filter(user = 3).values_list('id','user', 'contact_date', 'contact_time').order_by("-contact_date")
lea = leavework.objects.filter(user =3).values_list('id','user','contact_date','contact_time').order_by('-contact_date')
name = Staff.objects.filter(id = 3).values_list('user_name')
row = [kintaiLog(name, i, None, None) for i in range(32)]
for att in obj_all:
day = att[2].day
log = row[day]
if log.attTime is None:
log.attTime = att[3]
elif log.attTime < att[3]:
log.attTime = att[3]
for leav in lea:
day = leav[2].day
log = row[day]
if log.leaveTime is None:
log.leaveTime = leav[3]
elif log.leaveTime < leav[3]:
log.leaveTime = leav[3]
fmt = 'DAY:%02s, NAME:%10s, ATT:%s LV:%s'
for log in row:
if (log.attTime is not None) or (log.leaveTime is not None):
print fmt % log.day, log.name, dt2s(log.attTime), dt2s(log.leaveTime)
writer.writerow(row)
return response
答案 0 :(得分:0)
您的问题就在这里,
class kintaiLog(object):
def __init__(self, name, day, attTime, leaveTime):
self.name = name
self.day = day
self.attTime = attTime
self.leaveTime = leaveTime
您正在将实例推送到列表理解而不是值。
row = [kintaiLog(name, i, None, None) for i in range(32)]
所以它给出了输出对象实例。
<强>解决方案:强>
class kintaiLog(object):
def __init__(self, name, day, attTime, leaveTime):
self.name = name
self.day = day
self.attTime = attTime
self.leaveTime = leaveTime
@property
def row_data(self, ):
return (self.name, self.day, self.attTime, self.leaveTime)
row = [kintaiLog(x, i, None, None).row_data for i, x in enumerate(name)]
答案 1 :(得分:0)
@ dhana,谢谢 我在这里解决了:现在正在运作
登录行: if(log.attTime不是None)或(log.leaveTime不是None): writer.writerow([log.name,log.day,dt2s(log.attTime),dt2s(log.leaveTime)])