Sar*_*ica 31 django django-models django-migrations
我有两个应用程序(ook并且eek说),我想ook从模型中使用外键到模型eek.两者都是在INSTALLED_APPS与ook第一位.
在ook.models.py,我有:
class Fubar(models.Model):
...
Run Code Online (Sandbox Code Playgroud)
在eek.models.py,我有:
class monkey(models.Model):
external = models.ForeignKey('ook.Fubar', blank=True, null=True)
...
Run Code Online (Sandbox Code Playgroud)
生成的迁移是:
class Migration(migrations.Migration):
dependencies = [
('eek', '0002_auto_20151029_1040'),
]
operations = [
migrations.AlterField(
model_name='monkey',
name='external',
field=models.ForeignKey(blank=True, to='ook.Fubar', null=True),
),
]
Run Code Online (Sandbox Code Playgroud)
当我运行迁移时,我收到此错误:
...
1595 raise ValueError('Foreign Object from and to fields must be
the same non-zero length')
1596 if isinstance(self.rel.to, six.string_types):
-> 1597 raise ValueError('Related model %r cannot be resolved' % self.rel.to)
1598 related_fields = []
1599 for index in range(len(self.from_fields)):
ValueError: Related model u'ook.Fubar' cannot be resolved
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Tom*_*Rup 60
因为您ForeignKey在操作中,您必须添加ook到dependencies:
dependencies = [
('ook', '__first__'),
('eek', '0002_auto_20151029_1040'),
]
Run Code Online (Sandbox Code Playgroud)
Django迁移有两个"神奇"值:
__first__ - 获取模块首次迁移__latest__ - 获取模块最新迁移尝试为每个模型一个一个地运行迁移。
这样,您可以调试app您面临的问题
python manage.py migrate appmname
Run Code Online (Sandbox Code Playgroud)
就我而言,是缓存和之前的迁移导致了此错误。我删除了__pycache__迁移文件夹,然后重新运行迁移命令,它起作用了。
请记住,当您执行python manage.py makemigrations此操作时,它不会看到任何新的迁移,并且会控制台输出no changes detected。你必须采取python manage.py makemigrations your_app_name行动才能让事情顺利进行。
我只是遇到了相同的错误,但是引用的是声明为同一迁移的一部分的模型。事实证明,第一个migrations.CreateModel(...)引用了一个尚未声明的模型。我手动将其移至引用模型的声明下方,然后一切正常。
| 归档时间: |
|
| 查看次数: |
22492 次 |
| 最近记录: |