Передача данных из формы в представление 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
.