簡體   English   中英

Django:在models.py中將TimeField更改為DateTimeField

[英]Django: Change TimeField to DateTimeField in models.py

在我的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(不向南)

這是因為time不能轉化(鑄造),以timestamp (既不是他們的時區相關變種)在PostgreSQL中。 F.ex. 這也會失敗:

SELECT 'now'::time::timestamp

在這些情況下,應該在ALTER TABLE語句中USING子句(如果可以直接編輯它):

ALTER TABLE [ IF EXISTS ] [ ONLY ]  [ * ]
ALTER [ COLUMN ] 
[ SET DATA ] TYPE  [ COLLATE  ] [ USING  ]

您的查詢將如下所示:

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

如果表中沒有任何數據,則可以從應用程序的“遷移”文件夾中刪除遷移,並將字段更改為“日期時間”,然后進行初始遷移。 我的問題得以解決,而無需涉及SQL查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM