Re: [問題] Django Migration設定出錯

看板Python作者 (一卡)時間10年前 (2015/10/01 22:21), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1M3K5D6W (Python)
討論串 (同標題文章)
文章代碼(AID): #1M3K5D6W (Python)