我有一个Physical_therapy_order模型和一个事件模型(一个事件具有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
这只是FINE EXCEPT:我的PTEvent模型的post_save信号附加了一个函数。此函数拉取事件的相关pt_order并对其进行一些修改。现在,如果我首先保存事件形式,那么信号的变化就不会发生。如果我首先保存ptform,那么ptform更改将被丢弃并且信号发生变化。
这是重要的:ptform正在编辑三个与post_save信号完全不同的字段。所以它不像他们修改相同的数据,只是相同的模型实例。我认为表单只保存meta.fields属性中的字段。为什么会这样?另外,如果我先保存ptform,那么当保存eventsform时,信号是否应使用更新的physical_therapy_order?我不确定我是否走在正确的轨道上?
答案 0 :(得分:0)
我认为这是因为缓存的对象。
我建议的是
eventform
pt_order
的新实例查询数据库或通过已保存的eventform实例示例代码更改:
# your code
if keep_saving:
evt = eventform.save()
# I'm not sure exact name of your field name for pt_order in Event model, change appropriately
newptform = PT_schedule_form(data=request.POST, instance= evt.pt_order)
newpt = newptform.save()