django migrate失败常见错误:ValueError: Related model u'app.model' cannot be resolved

在migrate生成表的时候往往会出现Related model u’app.model’ cannot be resolved的问题,这种问题往往出现在有各种的外键关系的数据表。
在我们makemigrations时,在我们app 下会生成migrations/000nxxx.py文件,记载着我们每次改动models的记录,如果我们所写的model是带有外键的时候,文件中会写入其依赖表,如图000nxxx.py
文件中dependencies明确指出当前model所依赖的表,而在进行迁移的时候django不知道是按什么顺序进行生成的(笑,其实我也不太懂他的迁移顺序),就有可能先去生成携带外键的表了,而这时他会发现外键所指向的表还没生成呢,结果就会报错(无奈脸)。

解决办法:
在报错之后查看console输出的错误日志,ValueError: Related model u’app.model’ cannot be resolved中的app.model就是那个还未生成的被外键指向的表,下一步把带有外键的字段注释掉,再把报错的000nxxx.py删除掉(非常重要!!,最后再解释为什么):

例子
class A(models.Model):
	pass
class B(models.Model):
	name = models.Forienkey(A)  #就是这个字段导致你迁移失败,把它先注释掉。

然后再进行makemigrations,再migrate,让他能顺利的生成依赖表。然后把你之前注释掉的那个字段再去除注释,再进行makemigrations,再migrate,就能正确执行啦啦。

至于为什么删除000nxxx.py,这是我的一个亲身尝试,不删除的话,错误不会解决,所以我猜测再migrate时,django会顺序执行app/migrations文件夹下的所有000nxxx.py文件,类似于你在models编写过程中先写了一张表后来删除了,django在执行的时候也会根据app/migrations文件夹下的所有000nxxx.py文件顺序执行先建一张表再删除,感觉挺low的。

今天到这吧。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值