好吧,所以我觉得这里有几个问题,你的
post
和
form_valid()
方法。我参考了我自己的内联表单集实现,以了解您的不同做法。
首先,我认为岗位方法的第一行应该是
self.object = self.get_object()
.
第二,
weather_forecast_form = WeatherForecastFormset(self.request.POST)
应该是
weather_forecast_form = WeatherForecastFormset(self.request.POST, instance=self.object)
.
注意这里我们得到的对象和在表单集中的实例中使用它之间的关系。这就是post方法的全部内容。
现在,在我自己的实现中,我有许多表单集,因此我按如下循环遍历每个表单集(如果将表单集放入列表并传递给
form_valid
):
def form_valid(self, form, formsets):
self.object = form.save()
for formset in formsets:
formset.instance = self.object
formset.save()
return HttpResponseRedirect(self.get_success_url())
注意,我们在这里完全保存父窗体,包括提交它。然后保存所有表单集。如果要保留单个表单集,可以很容易地将上述代码更改为以下代码:
def form_valid(self, form, weather_forecast_form):
self.object = form.save()
weather_forecast_form.instance = self.object
weather_forecast_form.save()
return HttpResponseRedirect(self.get_success_url())
你在问题底部报告的错误是
form.save(commit=False)
. 现在的情况是,你在“假装”拯救父母,然后试图完全拯救孩子。数据库没有父级的记录,因此它会弹出该错误。必须在保存多对多记录之前提交(至少以我的经验)。