這是一個奇怪的,但我會盡我所能解釋。我有兩種模式:一種代表電子郵件(消息),另一種代表銷售負責人(AffiliateLead)。當通過網站提交表格時,系統會生成一個表格併發送電子郵件。消息模型有一個可選的FK返回到潛在客戶。從消息模型文件:MySQL上的奇怪IntegrityError:#1452
lead = models.ForeignKey('tracking.AffiliateLead', blank=True, null=True)
現在,這個基本的shell工作:
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()
然而,表單視圖本身不。它拋出一個IntegrityError當我嘗試保存一個指向AffiliateLead消息:
(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,我確實可以看到它在嘗試插入消息之前插入AffiliateLead,並且消息INSERT正在使用正確的AffiliateLead ID。我真的很難在這一點上。我甚至嘗試過手動的事務處理無濟於事。
謝謝,這有助於。這正是我所看到的。最近升級了我的電腦,我猜想mysql現在默認爲InnoDB,因爲它曾經是MyISAM,所以這是非常令人驚訝的行爲。 – 2011-05-21 15:50:28