У меня есть модель Physical_therapy_order и модель Event (событие имеет внешний ключ для Physical_therapy_order). У меня есть представление, которое позволяет пользователю создавать новое событие. Также есть форма с 3 полями из модели Physical_therapy_order.
def PTEventCreateView(request, pt_pk):
#get the pt order and create an a form for that order
pt_order = get_object_or_404(Physical_therapy_order, pk=pt_pk)
ptform = PT_schedule_form(instance=pt_order)
if request.POST:
eventform = PTEventForm(data=request.POST)
ptform = PT_schedule_form(data=request.POST, instance=pt_order)
if eventform.is_valid() and ptform.is_valid():
#I do some checks here that compare data across the two forms.
# if everything looks good i mark keep_saving=True so I can
# continue to save all the data provided in the two forms
if keep_saving:
ptform.save()
eventform.save()
#...send user to succss page
Это работает просто ОТЛИЧНО, ЗА ИСКЛЮЧЕНИЕМ: моя модель PTEvent имеет функцию, прикрепленную к ее сигналу post_save. Эта функция извлекает связанный с событием pt_order и вносит в него некоторые изменения. Теперь, если я сначала сохраню форму события, изменения сигнала не произойдут. если я сначала сохраню ptform, изменения ptform будут отброшены, и произойдут изменения из сигнала.
ЭТО ВАЖНО: ptform редактирует три совершенно разных поля, чем сигнал post_save. Так что это не похоже на то, что они изменяют одни и те же данные, только один и тот же экземпляр модели. Я думал, что форма сохраняет только поля в своем атрибуте meta.fields. Почему это происходит? Кроме того, если я сначала сохраню ptform, то при сохранении формы событий не должен ли сигнал использовать обновленный физический_терапевтический_порядок? Я даже не уверен, что я на правильном пути?