我认为可能有一些非常简单的事情我在这里失踪但我无法找到它。
我的django项目中有一个自定义管理命令,它应该遍历Record
模型的实例并将它们写入xlsx文件。
我正在使用xlsxwriter
,因此,我需要将datetime.datetime
个实例中的Record
值转换为天真的对象。所以我想说"当你在DateTimeField
模型中遇到Record
时使用value.replace(tzinfo=None)
来使对象变得幼稚,然后再编写#34;。
出于某种原因,我的if isinstance(value, datetime.datetime)
永远不会返回true,我从xlsxwriter
收到关于天真/感知datetime
对象的写入错误。
以下是相关代码:
sampleadmincommand.py
import pytz
import datetime
....
for i, row in enumerate(list(Record.objects.all())):
for j,field in enumerate(list(Record._meta.get_fields())):
value = getattr(row,field.name)
if isinstance(value, datetime.datetime):
value.replace(tzinfo=None)
worksheet.write(i, j, value)
else:
worksheet.write(i, j, value)
models.py
class Record(models.Model):
time = models.DateTimeField()
manHoursScheduled = models.FloatField()
manHoursWorked = models.FloatField()
carsOvernight = models.IntegerField()
carsEvent = models.IntegerField()
dailyTransientIncome = models.FloatField()
dailyTransientCars = models.FloatField()
dailyTransientIncomePerCar = models.FloatField()
nightlyTransientIncome = models.FloatField(null=True)
nightlyTransientIncomePerCar = models.FloatField(null=True)
eventName = models.TextField(null=True)
facility = models.ForeignKey(Facility)
def __str__(self):
return self.facility.name
我非常难过我在这里做错了什么,所以我真的很感激任何帮助!
答案 0 :(得分:2)
您似乎错过了将天真日期时间对象分配回value
日期时间对象。
应该是
value = value.replace(tzinfo=None) # assign 'naive' datetime object back to 'value'
而不仅仅是
value.replace(tzinfo=None) # will just return 'naive' datetime object
现在代码变为:
import pytz
import datetime
....
for i, row in enumerate(list(Record.objects.all())):
for j,field in enumerate(list(Record._meta.get_fields())):
value = getattr(row,field.name)
if isinstance(value, datetime.datetime):
value = value.replace(tzinfo=None) # assign value as 'naive' datetime object
worksheet.write(i, j, value) # will now use 'naive' datetime object to write
else:
worksheet.write(i, j, value)
答案 1 :(得分:0)
您的问题尚未得到解答,您的代码始终返回false,因为您使用的是datetime.datetime
而不是使用django模型的DateTimeField如此绝对使用:
from django.db.models.fields import DateTimeField
if isinstance(value, DateTimeField):
你应该这样做:
[[ randint(0,4) for x in range(0,4)] for y in range(0,4)]