Re: [問題] Django Migration設定出錯
※ 引述《panasonic89 (panasonic)》之銘言:
: 在 manage.py makemigrations的時候 似乎因為int 沒有initial value
: 所以他請我輸入
: 當時看他說明寫 datetime 也就照著打下去
: 結果在更新的時候會出現
: int() argument must be a string or a number, not 'datetime.datetime'
: 於是上網查詢了一下
: 我修改了 0003 的migrate的資訊 把 datetime改為 default=0;
: (也是唯一一個有看到datetime的migration file)
: Server可以正常run 但執行首頁會出現一樣的問題
: 可以看到兩張table有重新產生 可是執行首頁依然出現
: int() argument must be a string or a number, not 'datetime.datetime'
: 目前確定專案目錄下資料夾 migrations 已經不存在
: 想請問是不是還有哪些地方有所遺漏
: 以下附上部分錯誤訊息與 model程式碼
: #models.py
: class ContestEvent(models.Model):
: year = models.IntegerField(default=0)
: month = models.IntegerField(default=0)
: event_name = models.TextField(default="A")
: event_member = models.TextField(default="A")
: date_of_event = models.IntegerField(default=0) <=這欄位是被我誤填的
: datetime為預設值的,現在修正為這樣
: 感謝各位指點迷津
下面以 django 1.8 + mysql 5.6 做說明,1.7 以前可能會不同,
請自行對照官網說明
先問一下,你砍 migration 前有沒有先跑過下面這個指令把 app
的版本回復到 0002,但要注意的是 fake 後不一定會回復到先前
的 migration 狀態,例如我先新增兩個欄位 a b,之後砍掉 b,
再 fake 回前一版,b 欄位是不會加回去的,要自己寫 sql 手動
加回去
./manage.py migrate --fake app 0002
在 django 中,DateField 或 DatetimeField 在資料庫中對應的是
varchat 或 text,因為你說預設值一開始填 datetime.datetime,
因此我一開始假設你 date_of_event 指的是事件發生日期,那麼你
應該將這個欄位指定成 CharField 或 DateField
但考慮到你有 year、month 這兩個欄位,我猜你 date_of_event 指
的應該是事件的「day」,因此你可以考慮新增一個欄位用來儲存日期
如果你的網站已經上線,可能要考慮在 migrations 中手動新增 RunPython
將 year month date_of_event 轉成 datetime 然後儲存到新欄位,
但如果還沒上線,整理一下 model 砍掉 migration 重建資料庫應該
就能解決你問題了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.17.178
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1443709261.A.1A0.html
是說我覺得你問題可能也不一定在 model 上,可能是你把 datetime
物件直接用 int 去轉資料也說不定
※ 編輯: drm343 (36.236.17.178), 10/01/2015 22:26:54
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章