Django 编程错误:无法将类型双精度转换为没有时区的时间

Django 编程错误:无法将类型双精度转换为没有时区的时间,django,postgresql,django-models,casting,postgresql-9.4,Django,Postgresql,Django Models,Casting,Postgresql 9.4,我有一个django应用程序,其型号如下: class Event(models.Model): # id = models.IntegerField(primary_key=True) event_type = models.ForeignKey( EventType, on_delete=models.DO_NOTHING, # we don't want to delete anything in the StatusType

我有一个django应用程序,其型号如下:

class Event(models.Model):
    # id = models.IntegerField(primary_key=True)
    event_type = models.ForeignKey(
        EventType,
        on_delete=models.DO_NOTHING,
        # we don't want to delete anything in the StatusType table.
        blank=True,
        null=True,
    )
    reason_code = models.IntegerField(default=0)
    elapsed_time = models.IntegerField(default=0)
    event_at = models.DateTimeField("Event Time", blank=True, auto_now_add=True)
    object_id = models.ForeignKey(Machine, on_delete=models.DO_NOTHING, )
    count = models.BigIntegerField(blank=True, null=True)
    position = models.IntegerField(blank=True, null=True)
    rfid_tag = models.ForeignKey(Employee, blank=True, null=True, on_delete=models.DO_NOTHING,
                                 verbose_name='User Name')
    hidden = models.BooleanField(default=False)  # for hiding from lists

    # def __str__(self):              # __unicode__ on Python 2
    #     return self.event_type

    class Meta:
        verbose_name = 'event'
        verbose_name_plural = 'Events'

    def __str__(self):
        return str(self.id)
在尝试运行简单迁移时,我不断遇到以下错误:

File "/home/icar/E-Django/venv/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/epicar/E-Django/venv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: cannot cast type double precision to time without time zone
我遇到的问题是,我不明白为什么它试图将双精度转换为没有时区的时间。我不想这样。我不太确定还能尝试什么。我尝试了以下几点:

SELECT CAST(elapsed_time as double precision) FROM event;
我还尝试将“运行时间”字段更改为整数,但得到了相同的错误(引用整数而不是双精度)。所以我知道这是一个特殊的领域

我已删除所有迁移,并尝试重新开始。那没用

有什么想法吗

更新:pgadmin中已用字段的属性:


如果我理解正确,您可以查看以下内容:

SELECT extract(epoch FROM now());

如果我理解正确,您可以查看以下内容:

SELECT extract(epoch FROM now());
算出了。:)它最终在Django一方:

字段类型更改:

elapsed_time = models.TimeField(blank=True, auto_now_add=True)
这解决了Django和Postgres字段类型之间的冲突

System check identified no issues (0 silenced).
February 09, 2017 - 16:34:59
Django version 1.9, using settings 'E-Django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
一切都很好,开始运行了

找到了答案。:)它最终在Django一方:

字段类型更改:

elapsed_time = models.TimeField(blank=True, auto_now_add=True)
这解决了Django和Postgres字段类型之间的冲突

System check identified no issues (0 silenced).
February 09, 2017 - 16:34:59
Django version 1.9, using settings 'E-Django.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

一切都很好,开始运行了

这到底是在做什么?从epoch(1970-01-01 00:00:00)获取秒数或从interval获取秒数。这是将时间戳或间隔大小写为双精度HMMM的唯一方法。。。进入该字段的数据从技术上讲是几秒钟。这会导致它抛出错误吗?我们没有真正的时间戳。我们不想。我们想显示经过的秒数,以便我可以对其进行计算。。。以简单数字的形式(不是时间域)。我知道您可以对时间字段进行计算。我不使用django,但看起来您的表
event
将field
eassed\u time
作为时间戳。您可以在psql或pgadmin中查找表描述吗?没问题-找到原因非常有趣。两次有趣的自我发现这到底是在做什么?从epoch(1970-01-01 00:00:00)获取秒数或从interval获取秒数。这是将时间戳或间隔大小写为双精度HMMM的唯一方法。。。进入该字段的数据从技术上讲是几秒钟。这会导致它抛出错误吗?我们没有真正的时间戳。我们不想。我们想显示经过的秒数,以便我可以对其进行计算。。。以简单数字的形式(不是时间域)。我知道您可以对时间字段进行计算。我不使用django,但看起来您的表
event
将field
eassed\u time
作为时间戳。您可以在psql或pgadmin中查找表描述吗?没问题-找到原因非常有趣。两次有趣的自我发现这不能解决问题这不能解决问题