Как я могу вызвать представление внутри другого представления django

В настоящее время у меня есть представление, которое по сути закрывает лид, то есть просто копирует информацию из одной таблицы (лиды) в другую (сделки), теперь я хотел бы сделать так, чтобы после нажатия кнопки закрыть, пользователь перенаправлялся на другую страницу, где он может обновить некоторые записи (прогноз продаж), у меня есть представление, которое обновляет лид, поэтому я подумал, что могу сделать что-то вроде следующего:

@login_required
def close_lead(request):
    id = request.GET.get('project_id', '')
    keys = Leads.objects.select_related().get(project_id=id)
    form_dict = {'project_id': keys.project_id,
                 'agent': keys.agent,
                 'client': keys.point_of_contact,
                 'company': keys.company,
                 'service': keys.services,
                 'licenses': keys.expected_licenses,
                 'country_d': keys.country
                 }

    deal_form = NewDealForm(request.POST or None,initial=form_dict)

    if request.method == 'POST':
        if deal_form.is_valid():
            deal_form.save()
            obj = Leads.objects.get(project_id=id)
            obj.status = "Closed"
            obj.save(update_fields=['status'])
            ## Changing the Forecast Table Entry
            forecast = LeadEntry.objects.filter(lead_id=id)
            for i in forecast:
                m = i
                m.stage = "Deal"
                m.save(update_fields=['stage'])
            messages.success(request, 'You have successfully updated the status from open to Close')
            update_forecast(request,id)

        else:
            messages.error(request, 'Error updating your Form')


    return render(request,
                  "account/close_lead.html",
                  {'form': deal_form})


Это представление предоставляет набор форм, который я хочу обновить после закрытия лида

@login_required
def update_forecast(request,lead_id):
    # Gets the lead queryset
    lead = get_object_or_404(Leads,pk=lead_id)
    #Create an inline formset using Leads the parent model and LeadEntry the child model
    FormSet = inlineformset_factory(Leads,LeadEntry,form=LeadUpdateForm,extra=0)
    if request.method == "POST":
        formset = FormSet(request.POST,instance=lead)
        if formset.is_valid():
            formset.save()
            return redirect('forecast_lead_update',lead_id=lead.project_id)

    else:
        formset = FormSet(instance=lead)

    context = {
                'formset':formset
               }
    return render(request,"account/leadentry_update.html",context)

Как вы видите, я вызываю функцию update_forecast(request,id) после валидации данных в форме, и я ожидал, что буду каким-то образом перенаправлен на HTML страницу, указанную в этой функции, однако, после нажатия кнопки submit, форма из первого представления валидируется, но затем ничего не происходит, так что функция не выводит HTML страницу

Мой вопрос, как я могу использовать существующие функции в моих представлениях?, очевидно, я представляю, что следуя принципам DRY, вы можете сделать это в Django, так что же я делаю не так?, как я могу вызвать существующую функцию внутри другой функции в представлениях?

Представление возвращает объект ответа. В вашем текущем коде вы вызываете второе представление, но ничего не делаете с его ответом. Если бы вы просто хотели отобразить статическое содержимое (не форму, которая может привести к действию, которому важен текущий URL), вы могли бы вернуть объект ответа из второго представления - return update_forecast(request, id).

Но поскольку ваше второе представление отображает форму, вам важно, каким будет действие для представления из второй формы. Типичная идиома Django заключается в том, что формы отправляются на URL текущей страницы - это не будет работать, если вы просто вызовете форму и вернете ее объект ответа. Вы могли бы настроить действие во втором представлении, скажем, добавить необязательный параметр к представлению, но обычная идиома для обработки форм - это перенаправление на представление, которое вы хотите показать при успехе. Точно так же, как вы делаете это в представлении update_forecast. Что-то вроде этого:

messages.success(request, 'You have successfully updated the status from open to Close')
return redirect('update_forecast', lead_id=id)
Вернуться на верх