当我尝试填充数据时,我在Django 1.7中的两个模型之间遇到外键约束违规。
第一个模型是Specialty,一个简单的名称占位符,如下所示:
class Specialty(MongoidModel):
name = models.CharField(max_length=100)
引用它的模型Job,看起来像这样:
class Job(MongoidModel):
specialty = models.ForeignKey(
Specialty,
null=True,
blank=True
)
这两个都继承了MongoidModel,它只是一个包含id,created_at日期和updated_at日期的自定义模型,用于从原始Mongo数据库移植数据。
Makemigrations运行正常,迁移也运行良好,但当我实际尝试移植所有Job对象时,我立即收到此错误:
django.db.utils.IntegrityError: insert or update on table "jobs_job"
violates foreign key constraint "D76699ba021e613d02bad10e8fb41f69"
DETAIL: Key (specialty_id)=(None) is not present in table
"specializations_specialty".
查看导致崩溃的具体工作表明它包含专业的无,因为许多工作没有专业。
我的理解是数据库正在尝试查找id为None的特殊对象,并且失败了。我认为这就是在ForeignKey定义中的空白= True和null = True应该优雅地避免,不让它到达那个状态,只是让关联谎言?
答案 0 :(得分:0)
如果将数据库切换到Sqlite3,这是否有效?
您确定自己已经manage.py makemigrations specialty
和manage.py migrate
了吗?否则,可能存在陈旧约束。
答案 1 :(得分:0)
事实证明,答案就是我创建模型的方式。当我有一个作家以“无”作为他们的专业时,我还在通过那个领域:
{'writer_name': 'Bob', 'specialty_id':None}
到对象映射器/对象创建器,并且django正在寻找None作为Specialty表中的键。正确的做法是检查special_id是否为None,然后将它从mapper / object creator中一起排除:
{'writer_name': 'Bob'}
感谢您提供了有用的评论,我学到了很多东西!