我使用Python 3.5.2和使用SQLite的Django 1.11
我遇到的情况是,我想用某个名称命名我的模型 Class ,但是不同的名称我在manage中得到不同的结果。关于 ForeignKeys
的py迁移shell的例子:
modules.py
from django.db import models
class Place(models.Model):
question_text = models.CharField(max_length=200)
class Choice(models.Model):
question = models.ForeignKey(Place, on_delete=models.CASCADE)
运行python3 manage.py makemigrations post
Migrations for 'post':
post/migrations/0001_initial.py
- Create model Choice
- Create model Place
- Add field question to choice'
将类Cho重命名为示例"评级":
from django.db import models
class Place(models.Model):
question_text = models.CharField(max_length=200)
class Rating(models.Model):
question = models.ForeignKey(Place, on_delete=models.CASCADE)
迁移尝试的输出:
Migrations for 'post':
post/migrations/0001_initial.py
- Create model Place
- Create model Rating
您可能会注意到外键实现消失了。我到处都检查了三次。试过新项目。坚持了几天。是否有任何类命名限制或某种错误?
祝你度过愉快的假期,谢谢。
答案 0 :(得分:3)
这不是错误,在这两种情况下都会创建外键。
在第一种情况下,首先创建Choice
模型,并且由于Place
尚不存在,因此在创建模型时无法创建外键。因此,稍后在创建Place
模型后的单独步骤中添加它。
在第二种情况下,首先创建Place
模型,因此可以在CreateModel
的{{1}}操作中创建外键。
理想情况下,两种情况都会尽可能产生第二个输出,因为它包含的步骤较少,但优化尚未实现。