Передача данных из формы в представление Django

У меня есть две функции в views.py, первая позволяет выводить информацию из таблиц. Вторая - получать данные из формы и перенаправлять на страницу с результатом. Как я могу передать данные, полученные из формы, в первую функцию, чтобы на основе этих самых данных отобразить информацию из таблиц?

В первой функции:

def SuOp(request): 
    allrooms = Rooms.objects.all()
    allfood = Food.objects.all()
    alltours = Tours.objects.all()  
    
    data = {   
    'allfood': allfood, 
    'allrooms': allrooms,
    'alltours': alltours,
    }

    return render(request, './obj.html', data)

во второй функции:

def Main(request):
    error = ''
    if request.method == 'POST':
        form = SearchMain(request.POST)
        if form.is_valid():
              budget = form.cleaned_data.get("budget") 
              arrival_date = form.cleaned_data.get("arrival_date") 
              departure_date = form.cleaned_data.get("departure_date") 
              number_of_people = form.cleaned_data.get("number_of_people")
              count_days = (departure_date-arrival_date).days 
              return redirect('allobject')

        else:
              error = 'The form has been filled out incorrectly'

    form SearchMain()

    data = {
        'formS': form,
        'error': error,
    }

    return render(request, './main.html', data)

urls.py:

urlpatterns = [
    path('', views.Main, name='main'),
    path(r'allobject/$', views.SuOp, name='allobject')
]

Вы можете использовать сессии для передачи значений от одного представления к другому. Сначала установите сессию:

if form.is_valid():
    budget = form.cleaned_data.get("budget")
    request.session['budget'] = budget
    ...
    return redirect('allobject')

Тогда ваше другое представление может получить переменную сессии:

def SuOp(request):

    budget = request.session.get('budget')
    ...

    allrooms = Rooms.objects.all()
    allfood = Food.objects.all()
    alltours = Tours.objects.all()  
    
    data = {   
    'allfood': allfood, 
    'allrooms': allrooms,
    'alltours': alltours,
    }

    return render(request, './obj.html', data)

Другой вариант - сделать все вычисления в представлении, которое получает бюджет, дату_прибытия, дату_отправления, количество_людей, сохранить нужные результаты в объектах Rooms, Food и Tours.

Вернуться на верх