我一直试图将新创建的对象的值传递给下一个CreateView,以便可以创建新的子模型。
会发生什么:
用户通过CreateView创建父模型
如果该表单有效,则success_url重定向到另一个Child模型的CreateView。为了创建子模型,需要父模型的ID(ForeignKey关系)。
创建子模型后,将重定向到完成的页面。
下面有一个代码示例。
class AddParentModelView(LoginRequiredMixin, CreateView):
model = ParentModel
template_name = "dashboard/add_parent_model.html"
form_class = ParentModelForm
success_url = '/REDIRECT_TO_CHILD_MODEL/'
def form_valid(self, form):
form.instance.owner = self.request.user
# I Also tried sessions:
# self.request.session['parent_id'] = form.instance.id
# But they return None:
# print(self.request.session["venue_id"])
return super().form_valid(form)
class AddChildModelView(LoginRequiredMixin, CreateView):
model = ChildModel
template_name = "dashboard/add_child_model.html"
form_class = ChildModelForm
success_url = '/thanks/'
解决此问题的正确方法是什么?如果可能,请说明您的解决方案。
谢谢!
答案 0 :(得分:1)
在AddParentModelView上定义get_success_url()
,以返回包含父ID的子URL。
例如,如果AddChildModelView的URL类似于:
path('/<int:parent_id>/add_child', AddChildModelView.as_view(), name='add-child')
然后定义如下方法:
def get_success_url(self):
return reverse('add-child', kwargs={'parent_id': self.object.id})