Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python isinstance(datetime.datetime,DateTimeField.value)对于Django DateTimeField始终返回false_Python_Django_Datetime_Xlsxwriter - Fatal编程技术网

Python isinstance(datetime.datetime,DateTimeField.value)对于Django DateTimeField始终返回false

Python isinstance(datetime.datetime,DateTimeField.value)对于Django DateTimeField始终返回false,python,django,datetime,xlsxwriter,Python,Django,Datetime,Xlsxwriter,我想这里可能遗漏了一些非常简单的东西,但我找不到 我在django项目中有一个自定义的admin命令,它应该遍历记录的模型实例,并将它们写入xlsx文件 我正在使用xlsxwriter,因此,我需要将Record实例中的datetime.datetime值转换为原始对象。因此我想说“当您在记录模型中遇到日期时间字段时,请使用值。替换(tzinfo=None)以使对象在写入之前处于初始状态” 出于某种原因,我的if isinstance(value,datetime.datetime)永远不会返回

我想这里可能遗漏了一些非常简单的东西,但我找不到

我在django项目中有一个自定义的admin命令,它应该遍历
记录的模型实例,并将它们写入xlsx文件

我正在使用
xlsxwriter
,因此,我需要将
Record
实例中的
datetime.datetime
值转换为原始对象。因此我想说“当您在
记录
模型中遇到
日期时间字段
时,请使用
值。替换(tzinfo=None)
以使对象在写入之前处于初始状态”

出于某种原因,我的
if isinstance(value,datetime.datetime)
永远不会返回true,并且我从
xlsxwriter
得到一个关于naive/aware
datetime
对象的写入错误

以下是相关代码:

sammincommand.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

我很困惑我到底做错了什么,所以我真的很感激任何帮助

您似乎没有将原始datetime对象重新分配给
datetime对象。

应该是

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)

您的问题尚未得到回答,您的代码总是返回false,因为您使用的不是django模型的datetime字段,而是datetime.datetime

因此,不使用:

if isinstance(value, datetime.datetime):
你应该做:

from django.db.models.fields import DateTimeField
if isinstance(value, DateTimeField):

抱歉,这和我的浆糊有关。缩进都是正确的,我编辑了文章以显示尽可能多的内容。@JwM我也做了一些编辑。您的检查在哪里?它位于admin命令的第二个for循环中。在我复制代码并忘记将其更改回来之前,我正在处理不同的检查。修正了,嗯。我试过了,但仍然没有触发声明。不过,你可能知道一些事情,我会再把它弄得一团糟。谢谢你!这正是我的问题,我不敢相信我错过了这么简单的事情。