【问题标题】:Django - CreateView passing the created objects id to another CreateViewDjango - CreateView 将创建的对象 id 传递给另一个 CreateView
【发布时间】:2019-06-06 20:14:12
【问题描述】:

我一直在尝试将新创建的对象的值传递给下一个 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/'

解决这个问题的正确方法是什么?如果可能,请说明您的解决方案。

提前致谢!

【问题讨论】:

    标签: python django django-forms django-views django-urls


    【解决方案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})
    

    【讨论】:

    • 谢谢罗斯曼先生!我已编辑您的答案以包含 kwargs={}。
    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2012-10-29
    • 2018-12-09
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多