Django - CreateView, передающий идентификатор созданных объектов другому CreateView - PullRequest
0 голосов
/ 12 января 2019

Я пытался передать значения вновь созданного объекта следующему CreateView, чтобы можно было создать новую дочернюю модель.

Вот что происходит:

  1. Пользователь создает родительскую модель через CreateView

  2. Если форма действительна, success_url перенаправляет на CreateView другой дочерней модели. Для создания дочерней модели требуется идентификатор родительской модели (отношение 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 голосов
/ 12 января 2019

Определите get_success_url() в AddParentModelView для возврата дочернего 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})
...