在migrate生成表的时候往往会出现Related model u’app.model’ cannot be resolved的问题,这种问题往往出现在有各种的外键关系的数据表。
在我们makemigrations时,在我们app 下会生成migrations/000nxxx.py文件,记载着我们每次改动models的记录,如果我们所写的model是带有外键的时候,文件中会写入其依赖表,如图
文件中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的。
今天到这吧。