Django - CreateView 将创建的对象 id 传递给另一个 CreateView
Django - CreateView passing the created objects id to another CreateView
我一直在尝试将新创建的对象的值传递给下一个 CreateView,以便可以创建新的子模型。
事情是这样的:
用户通过 CreateView 创建父模型
如果表单有效,success_url 重定向到另一个子模型的 CreateView。为了创建子模型,需要父模型的 ID(外键关系)。
创建子模型后重定向到完成的页面。
下面是我的代码示例。
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/'
解决这个问题的正确方法是什么?如果可能,请说明您的解决方案。
提前致谢!
在 AddParentModelView 上定义 get_success_url()
到 return 子 URL,包括父的 ID。
例如,如果 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})
我一直在尝试将新创建的对象的值传递给下一个 CreateView,以便可以创建新的子模型。
事情是这样的:
用户通过 CreateView 创建父模型
如果表单有效,success_url 重定向到另一个子模型的 CreateView。为了创建子模型,需要父模型的 ID(外键关系)。
创建子模型后重定向到完成的页面。
下面是我的代码示例。
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/'
解决这个问题的正确方法是什么?如果可能,请说明您的解决方案。
提前致谢!
在 AddParentModelView 上定义 get_success_url()
到 return 子 URL,包括父的 ID。
例如,如果 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})