这有点奇怪,但我会尽力解释。我有 2 个模型:一个代表电子邮件消息 (Message),另一个代表销售线索 (AffiliateLead)。当通过网站提交表单时,系统会生成潜在客户,然后发送电子邮件。消息模型有一个可选的 FK 返回到领导。从消息模型文件:
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()
然而,表单视图本身却没有。当我尝试保存指向 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并看到新创建的线索。当我在保存之前立即从数据库重新检索线索时,它甚至会在视图中抛出此错误:
af_lead = AffiliateLead.objects.get(id = af_lead.id)
msg.lead = af_lead
msg.save()
最后,如果我立即刷新(重新提交表单),它就会起作用。无完整性错误。如果我让 Django 打印出它正在执行的 SQL,我确实可以看到它在尝试插入消息之前正在插入 AffiliateLead,并且消息 INSERT 使用正确的 AffiliateLead ID。我现在真的很困惑。我什至尝试过手动交易处理,但无济于事。