好的,之前提出的类似问题似乎没有对此有正确的答案。 我有一个Django应用程序运行良好但现在使用基于Web的应用程序或命令行中的模型给我上述错误。我的所有表都是Innodb,我运行了syncdb。关闭完整性检查似乎违反直觉。如果我在这里或之前的回复中遗漏了明显的话,我表示歉意。任何帮助,感激不尽。
来自models.py
class difficulty(models.Model):
difficultyName = models.CharField(max_length=40)
difficultyDescription = models.CharField(max_length=200)
blank=False;
def __unicode__(self):
return self.difficultyName
class task(models.Model):
question = models.CharField(max_length=200)
dateEntered = models.DateTimeField('date entered') #, editable=False)
difficulty = models.ForeignKey(difficulty)
taskClass = models.ManyToManyField(taskClass,related_name ='taskClass')
keyword = models.ManyToManyField(keyword)
service = models.ManyToManyField(service)#, default = service.objects.get(serviceName='Medicine'))
answer = models.ManyToManyField(answer, related_name = 'taskAnswer')
def __unicode__(self):
return "A task - {0}\n with difficulty {1}\n and date {2}\n".format(self.question, self.difficulty, self.dateEntered)
在views.py中,对象被实例化并保存如下
if form.is_valid(): # All validation rules pass
theNewTask = form.save(commit=False)
theNewTask.dateEntered = timezone.now()
theNewTask.save() # the rest of the method deals with many-to-many relationships in the task class
在通过基于模板的Web表单处理时出现以下错误:
异常值:(1452,'无法添加或更新子行:异类 键约束失败(
djangoimp
。twomt_task
,CONSTRAINTdifficulty_id_refs_id_eca4bfb0
外键(difficulty_id
) 参考TwoMT_difficulty
(id
))')
使用python命令行中的类:
>> import twomt.models as T
>> from django.utils import timezone
>> task = T.task(question="where is spain")
>> task.dateEntered = timezone.now()
>> task.difficulty = T.difficulty.objects.get(id=2)
>> task.save()
给出错误:
Traceback(最近一次调用最后一次):----剔除了追溯--- IntegrityError:(1452,'无法添加或更新子行:异类 键约束失败(
djangoimp
。twomt_task
,CONSTRAINTdifficulty_id_refs_id_eca4bfb0
外键(difficulty_id
) 参考TwoMT_difficulty
(id
))')
但是实例化的类很好:
>>> print task
A task - where is spain
with difficulty Medium
and date 2015-03-19 11:19:04.494322+00:00
>>> print T.difficulty.objects.get(id=2)
Medium
显示来自TwoMT_task的列
Field Type Null Key Default Extra
'question', 'varchar(200)','NO', '' , NULL, ''
'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment'
'difficulty_id','int(11)', 'NO', 'MUL', NULL, ''
'dateEntered', 'datetime', 'NO', ' ', NULL, ''
显示来自twomt_difficulty的列
Field Type Null Key Default Extra
'id', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment'
'difficultyName', 'varchar(40)', 'NO', '', NULL, ''
'difficultyDescription','varchar(200)','NO', '', NULL, ''
答案 0 :(得分:0)
我遇到了同样的问题,并通过以下链接解决了该问题:
生成错误1452(23000),因为引用表订单的子列cid中的某些当前值不在引用表客户的父列ID中。在我们实际创建约束之前,它已经违反了约束规则。因此,MySQL无法创建约束。
因此,现在,您必须确定违反约束的行并进行更正。辛苦了吗?并不是的。您可以使用以下语句标识行:
mysql> select * from orders where cid not in (select distinct id from customers);
答案 1 :(得分:-1)
当您实际执行某些迁移,撤消它们并再次迁移它们然后删除上次迁移文件时,会发生这种情况。
示例,
在XYZ类中添加了一个字段 - >迁移。
删除该字段 - >再次迁移。
现已删除最近2个已迁移的文件。
所以Model.py保持不变,一切都保持不变但你删除了那些迁移文件。 在Model.py中编辑内容并再次迁移后,它将正常工作。