我有一个 Physical_therapy_order 模型和一个 Event 模型(一个事件具有 Physical_therapy_order 的外键)。我有一个允许用户创建新事件的视图。它还有一个包含来自 Physical_therapy_order 模型的 3 个字段的表单。
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,那么当保存 eventsform 时,信号不应该使用更新的物理治疗顺序吗?我不确定我是否走在正确的轨道上?