作者drm343 (一卡)
看板Python
标题Re: [问题] Django Migration设定出错
时间Thu Oct 1 22:20:59 2015
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1443709261.A.1A0.html
是说我觉得你问题可能也不一定在 model 上,可能是你把 datetime
物件直接用 int 去转资料也说不定
※ 编辑: drm343 (36.236.17.178), 10/01/2015 22:26:54