当前位置: 首页 > 面试题库 >

Django:在models.py中将TimeField更改为DateTimeField

夏侯鹏
2023-03-14
问题内容

在我的models.py中,我有一些具有这种属性的模型:

timestamp = models.TimeField(default=0)

我想将它们更改为:

timestamp = models.DateTimeField(default=0)

使用

python manage.py schemamigration app --auto

一审作品。但

python manage.py migrate app

导致此错误:

django.db.utils.ProgrammingError: column "timestamp" cannot be cast to type timestamp with time zone

所以我某种程度上需要使这种铸造成为可能。对于每个没有日期的时间,我想设置一个默认日期(例如昨天)。我怎样才能做到这一点?我只在SO上找到了它,由于这个错误,它根本没有帮助。顺便说一句:我正在使用postgres和python3。

我感谢您的帮助!

如果这样更容易,我可以直接在数据库上使用SQL(不向南)


问题答案:

这是因为在PostgreSQL中time无法将其转换(广播)为timestamp(与时区无关的变体)。F.ex. 这也会失败:

SELECT 'now'::time::timestamp

在这些情况下,应在USING语句中使用该子句ALTER TABLE(如果可以直接对其进行编辑):

[更改表](http://www.postgresql.org/docs/current/static/sql-altertable.html)[如果存在] [仅] _ **名称**_ [*]
ALTER [COLUMN] _ **列名**_
[SET DATA] TYPE _**DATA_TYPE**_ [COLLATE _ **核对**_ ] [USING _ **表达**_ ]

您的查询将如下所示:

ALTER TABLE "my_model"
ALTER COLUMN "column_name"
SET DATA TYPE TIMESTAMP WITH TIME ZONE USING 'yesterday'::date + "column_name"


 类似资料:
  • 问题内容: 假设我有以下QueryDict: 我想要一本这样的字典,例如: (我不在乎Unicode符号是否u继续存在。) 如果这样做queryDict.dict(),那么django网站建议,我将丢失属于的额外值var1,例如: 我正在考虑这样做: 有没有更好的办法? 问题答案: 这应该工作:

  • 我是Django新手,试图在virtualenv中创建一个Django项目来学习,但在上出现以下错误: 回溯(最后一次调用):文件“manage.py”,第21行,main() 文件“manage.py”,第17行,从命令行执行(sys.argv) 文件 “/home/suraj/Documents/my_projects/django_project/venv/lib/python3.6/sit

  • 问题内容: 我正在考虑将Django用于我要开始的项目(fyi,一个基于浏览器的游戏),而我最喜欢的功能之一就是根据我定义的Django模型自动创建数据库表(我似乎在其他任何框架中都找不到的功能)。当我在文档中看到此内容时,我已经认为这太好了,无法实现: Syncdb不会更改现有表 syncdb将仅为尚未安装的模型创建表。安装后,它将永远不会发出ALTER TABLE语句来匹配对模型类所做的更改。

  • 问题内容: 我正在尝试将我的应用拆分为几个文件: 我的第一个猜测是这样做: 这不起作用,然后我发现了这个问题,但是在此解决方案中,我仍然遇到问题,当我运行时,出现类似以下内容: 我对此不太确定,但我担心有关该部分的内容 : 这是我的model1.py文件: 这是我的model3.py文件: 显然可以,但是我收到了评论,如果我尝试执行此操作,则会发生相同的事情: 因此,我应该手动运行alter fo

  • 我是开发和的新手,在更改项目中的文件时遇到了一个问题。我的问题是: 我对项目中的任何文件(模板、视图、URL)的内容进行了更改,但在我当前运行的应用程序中,这些文件没有更新。我总是希望看到我的更改,我需要重新启动服务器(我正在使用),执行。是否有我应该安装/做的软件包或更改,以使其能够在运行时接受更改? 这是我的: 让我知道我可能提供的任何其他信息,以便更好地了解问题(如果不够清楚的话)。

  • 我知道这是很常见的问题,但我想知道为什么当我试图将DateTime转换为单词时,它不起作用,所以我使用了这种格式 提供格式 结果/转换为 这是我尝试过的,但它返回一个错误需要帮助 样品