Odd IntegrityError в MySQL: # 1452

Это довольно странно, но я постараюсь объяснить как можно лучше. У меня есть 2 модели: одна представляет собой сообщение электронной почты (Message), а другая - потенциальных клиентов (AffiliateLead). Когда форма отправляется через сайт, система генерирует лид, а затем электронные письма. Модель сообщения имеет дополнительный FK для возврата к лиду. Из файла моделей сообщений:

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()

Однако само представление формы не работает. Он выдает 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 и увидеть только что созданный лид. Он даже выдает эту ошибку в представлении, когда я повторно извлекаю интерес из БД непосредственно перед сохранением:

af_lead = AffiliateLead.objects.get(id = af_lead.id)
msg.lead = af_lead
msg.save()

Наконец, если я немедленно обновляю (повторно отправляя форму), это работает. Нет IntegrityError. Если у меня есть Django распечатать SQL, который он делает, я действительно вижу, что он ВСТАВЛЯЕТ AffiliateLead, прежде чем пытается ВСТАВИТЬ сообщение, и в сообщении INSERT используется правильный идентификатор AffiliateLead ID. Я действительно в тупике. Я даже пробовал обрабатывать транзакции вручную, но безрезультатно.

11
задан kensentor 13 January 2011 в 15:47
поделиться