이것은 이상한 것 같지만 가능한 최선을 다해 설명하려고 노력할 것입니다. 저는 2 가지 모델을 가지고 있습니다 : 하나는 이메일 메시지 (메시지)를 대표하고, 다른 하나는 판매 리드 (AffiliateLead)입니다. 양식이 사이트를 통해 제출되면 시스템에서 리드를 생성 한 다음 전자 메일을 보냅니다. Message 모델에는 선택적 FK가 리드에 있습니다.MySQL의 홀수 IntegrityError : # 1452
lead = models.ForeignKey('tracking.AffiliateLead', blank=True, null=True)
지금,이 기본 쉘이 작동 : 메시지 모델 파일에서
from tracking.models import Affiliate, AffiliateLead
from messages.models import Message
from django.contrib.auth.models import User
u = User.objects.get(username='testguy')
a = Affiliate.objects.get(affiliate_id = 'ACD023')
l = AffiliateLead(affiliate = a)
l.save()
m = Message(recipient=u, sender=u, subject='s', body='a', lead=l)
m.save()
그러나, 양식보기 자체는하지 않습니다. 내가 AffiliateLead을 가리키는 메시지를 저장하려고하면 그것은 IntegrityError가 발생합니다 :
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`app`.`messages_message`, CONSTRAINT `lead_id_refs_id_6bc546751c1f96` FOREIGN KEY (`lead_id`) REFERENCES `tracking_affiliatelead` (`id`))')
이 뷰는 단순히 양식을 복용 만들고 AffiliateLead을 저장 한 후 생성하고 있다는 사실에도 불구하고 (시도) 메시지를 저장합니다. 사실,이 오류가 발생하면 MySQL에 가서 새로 만든 리드를 볼 수 있습니다. 그것은 심지어 내가하면 바로 저장하기 전에 DB에서 리드를 다시 검색 뷰에서이 오류가 발생합니다 :
af_lead = AffiliateLead.objects.get(id = af_lead.id)
msg.lead = af_lead
msg.save()
을 마지막으로, 나는 즉시 새로 고침 경우 (재 제출하는 양식), 그것을 작동합니다. 무결성 오류가 없습니다. Django가 SQL을 인쇄하면 Message를 INSERT하기 전에 AffiliateLead를 INSERT하고 Message INSERT가 올바른 AffiliateLead ID를 사용하고 있음을 볼 수 있습니다. 나는이 시점에서 정말로 곤란하다. 나도 수동 트랜잭션 처리를 사용해 보았습니다.
감사합니다. 도움이되었습니다. 이것은 정확히 내가 본 것입니다. 최근에 내 컴퓨터를 업그레이드했는데, MyISAM이던 곳에서 mysql이 기본값으로 InnoDB를 기본값으로 설정 한 것 같습니다. 그래서 이것은 매우 놀랍습니다. –
나는 또한이 동일한 문제가 있었다. 다만, MySQL 5.5에서는, 디폴트의 테이블 형은 InnoDB입니다. 내 전체 사이트는 5.1로 구축되었습니다 (그리고 syncdb 및 loaddata를 실행하기 전에 5.5로 업그레이드했습니다). 따라서 나는이 오류 메시지 (# 1452)를 얻고있었습니다. 해결책은 sync db를 실행하기 전에 설정의 옵션에서 DB Type을 MyISAM으로 변경하는 것이 었습니다. 방법은 다음과 같습니다. http://djangosaur.tumblr.com/post/357759467/django-transaction-mysql-engine-innodb –