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

时间:2019-01-11 21:43:18

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

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

会发生什么:

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

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

  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/'

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

谢谢!

1 个答案:

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