Django - CreateView 将创建的对象 id 传递给另一个 CreateView

Django - CreateView passing the created objects id to another CreateView

我一直在尝试将新创建的对象的值传递给下一个 CreateView,以便可以创建新的子模型。

事情是这样的:

  1. 用户通过 CreateView 创建父模型

  2. 如果表单有效,success_url 重定向到另一个子模型的 CreateView。为了创建子模型,需要父模型的 ID(外键关系)。

  3. 创建子模型后重定向到完成的页面。

下面是我的代码示例。

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})