Ничего не происходит, когда вы нажимаете "Отправить", потому что вы не обернули свои входные данные в тег
<form action=".../presales_total" method="post">
...
</form>
.
Вам необходимо будет включить токен csrf {% csrf_token %}
, преобразоватьтип кнопки «отправить», а также измените метод на POST.
Наконец, убедитесь, что вы преобразовали введенные часы с помощью int()
, чтобы не умножать строку.
views.py
from django.shortcuts import render, redirect ## Added 'redirect'
def presales(request):
# my_opportunities = cwObj.get_opportunities()
# context = {'my_opportunities': my_opportunities}
return render(request, 'sales/presales.html')
def presales_total(request):
if request.method=='POST': # add this line
hours = request.POST['hours'] # change to POST
engineer_level = request.POST['selected_engineer_level'] # change to post
if engineer_level == 'PM':
wage = 225
elif engineer_level == 'Solutions Technician':
wage = 175
elif engineer_level == 'Solutions Engineer':
wage = 225
elif engineer_level == 'Senior Solutions Engineer':
wage = 275
elif engineer_level == 'Solutions Architect':
wage = 275
total = wage * int(hours) # POST request default submissions to string, convert to type int with int()
request.session['total'] = total ## store the value in session
return redirect('/sales/presales') ## send the user back to the first page
presales.html
<form action="/sales/presales_total" method="post"> # add this line
{% csrf_token %} # add this line
<div class="field">
<div class="control">
<input class="input" name="hours" id="hours" placeholder="Hours">
</div>
</div>
<label class="label">Engineer Level:</label>
<div class="field">
<div class="select">
<select name="selected_engineer_level" id="selected_engineer_level">
<option value="">Engineer Level</option>
<option value="PM">PM</option>
<option value="Solutions Technician">Solutions Technician</option>
<option value="Solutions Engineer">Solutions Engineer</option>
<option value="Senior Solutions Engineer">Senior Solutions Engineer</option>
<option value="Solutions Architect">Solutions Architect</option>
</select>
</div>
</div>
</div>
<div class="field">
<div class="control">
<button class="button is-info" type="submit">Add Task</button> # change to 'submit'
</div>
</div>
<span class="label is-medium is-pulled-right">Total: {{ request.session.total }}</span>
</form> # add this line ## change the template variable to 'request.session.total
На основе вашего комментария вы также можете `вернуть перенаправление (" продажи / предварительные продажи "), чтобы отобразить значение на том же самомформа.Вы должны будете сохранить вычисленную сумму в переменной сеанса, чтобы иметь возможность повторно получить к ней доступ.Если вы измените вопрос, включив его, я могу привести пример.
Редактировать: включить отображение итогов в первом шаблоне.
Чтобы использовать сеансы, нам нужно запустить python manage.py migrate
из командной строки на базовом уровне папки вашего проекта, чтобы инициализировать базу данных для хранения информации о сеансе и передачи информации между представлениями.Как только вы это сделаете, вы можете импортировать функцию redirect
в
- , вычислить сумму
- и сохранить ее в переменной сеанса 'total'
- sendпользователь возвращается на страницу предварительной продажи
Там мы можем получить доступ к переменной сеанса с помощью {{request.session.total}}.
Это не самое причудливое решение, но оно работает.