Ошибка, при переходе на страницу: KeyError at /teachers/dates/check_hours/redactor_check_hours ''

Всем доброго дня.

Пишу веб-сайт, столкнулся с проблемой перехода на страницу редактирования информации. Вообщем, у меня есть 2 шаблона:

  1. check_hours -> предназначен для просмотра записей за определенный месяц
  2. redactor_check_hours = предназначен для редактирования записей за определенный месяц
  3. dates -> предназначена для выбора месяца

views.check_hours

def check_hours(request):
    teacher = request.user.id
    month = request.GET['month']
    month_ = MonthModels.objects.get(name=months[month.lower()])
    result = []
    for i in TeacherLoadModel.objects.filter(teacher_id = teacher):
        result.append({
            'sem_id': i.semester_id.number_semester,
            'group_name': i.group_id.name,
            'teacher_name': i.teacher_id.first_name,
            "subject_name": i.semester_id.subject_id.name,
            "all_hours": i.semester_id.hours,
            "hours": ["" for i in range(31)],
            "sum": 0,
            "ost": 0,
        })
        for j in i.hour.filter(month=month_):
            result[-1]['hours'][j.day - 1] = j.value
            result[-1]['sum'] += j.value
      
        result[-1]['ost'] = result[-1]['all_hours'] - result[-1]['sum']

context = {
    "result" : result,
    "month": months[month.lower()],
    }

return render(request, 'main/teacher/check_hours.html',context)

views.redactor_check_hours

 def redactor_check_hours(request):
    month = request.GET['month']
    teacher = request.user.id
    month_ = MonthModels.objects.get(name=months[month.lower()])
    if request.method == 'POST':
        data = dict(request.POST)
        index = 0
        s = 0

        teacher_load = TeacherLoadModel.objects.get(
                teacher_id = teacher,
                semester_id__subject_id__name=data['subject'][s],
                group_id__name=data['group_name'][s],
            )

        for i in data['sessionNum']:
            if i.isdigit():
                try:
                    for j in teacher_load.hour.filter(month=month_, day=index+1):
                        teacher_load.hour.remove(j)
                except Hour.DoesNotExist:
                    print("err")
                
                Hour.objects.get_or_create(
                    month=month_,
                    day=index+1,
                    value=int(i),
                )

                teacher_load.hour.add(Hour.objects.get(
                    month=month_,
                    day=index+1,
                    value=int(i),
                ))
            
            if index == 30:
                index = 0
                s +=1
                if s == len(data['subject']):
                    break
                try:
                    teacher_load = TeacherLoadModel.objects.get(
                        teacher_id = teacher,
                        semester_id__subject_id__name=data['subject'][s],
                        group_id__name=data['group_name'][s],
                )
                except TeacherLoadModel.DoesNotExist:
                    print("##############################################")
            else:
                index+=1

    groups = GroupModel.objects.all()
    teacherload = TeacherLoadModel.objects.all()
    semesters = SemesterModel.objects.all()
    teachers = User.objects.all().exclude(first_name="")
    subjects = SubjectModel.objects.all()
    hours = SemesterModel.hours            
    result = []
    for i in TeacherLoadModel.objects.filter(teacher_id = teacher):
        result.append({
            'sem_id': i.semester_id.number_semester,
            'group_name': i.group_id.name,
            'teacher_name': i.teacher_id.first_name,
            "subject_name": i.semester_id.subject_id.name,
            "all_hours": i.semester_id.hours,
            "hours": ["" for i in range(31)],
            "sum": 0,
            "ost": 0,
        })
        for j in i.hour.filter(month=month_):
            result[-1]['hours'][j.day - 1] = j.value
            result[-1]['sum'] += j.value
      
        result[-1]['ost'] = result[-1]['all_hours'] - result[-1]['sum']
        
    context = {
        "result" : result,
        "month": months[month.lower()],
        "month_": month,
        }
    return render(request, "main/teacher/redactor/redactor_check_hours.html", context)

views.dates

def dates(request):
    if request.GET.get("month") is not None:
        return check_hours(request)
    return render(request, "main/teacher/dates.html")

При переходе со страницы check_hours на страницу redactor_check_hours, получаю ошибку:

KeyError at /teachers/dates/check_hours/redactor_check_hours ''

Я примерно понимаю, почему данная ошибка происходит, но не совсем понимаю как я могу её исправить, может быть кто сталкивался с такого рода ошибками.

Суть в том, что страница check_hours, открывается из вью dates, вью dates содержит в себе список месяцев. C помощью не сложной конструкции, я выполняю переход по конкретному месяцу, при этом в URL шаблона check_hours, дописывается наименование месяца и выглядит примерно так:

http://127.0.0.1:8000/teachers/dates/check_hours/redactor_check_hours?month=september

Но при переходе со страницы check_hours на redactor_check_hours, корректный URL адрес не формируется по какой то причине:

http://127.0.0.1:7000/teachers/dates/check_hours/redactor_check_hours?month=

Пример перехода на страницу check_hours из шаблона dates:

<li><button onclick="window.location.href='{% url "check_hours"  %}?month=september'">Сентябрь</button></li>

Таким же образом пытаюсь перейти на страницу redactor_check_hours со страницы -> check_hours, но без успешно, пример:

 <li><button onclick="window.location.href='{% url "redactor_check_hours" %}?month={{ month_ }}'">Изменить</button></li>

months - Список месяцев ['сентябрь','октябрь'....,'июнь']

ModelMonth - модель месяцев, которая содержит номер и наименование месяца.

Более подробный трейс ошибки: введите сюда описание изображения

template.check_hours

{% extends 'base.html' %}
{% block title %}Ведомость за {{month}}{% endblock %}
{% load static %}
{% block main %}
  <main role="main">
      <div class="menu-buttons-for-teacher-table">
          <div class="buttons-table-right">
            <ul>
                <li><button id="printTable">Печать</button></li>
                <li><button onclick="window.location.href='{% url "dates" %}'">Сменить месяц</button></li>
                <li><button onclick="window.location.href='{% url "not_found_page" %}'">Сравнить</button></li>
                <li><button onclick="window.location.href='{% url "redactor_check_hours" %}?month={{ month_ }}'">Изменить</button></li>
            </ul>
          </div>

      </div>
      <div class="head_load_sheet">
        <h1>Ведомость {{user.first_name}} за {{month}}</h1>
      </div>
      <div class="table-teacher">
        <table id="printMe">
        <style>
            @media print { /* Стили для печати */
            #printMe .hidden { display:none; } /* что не надо печатать */
            #printMe {
                font-size:14px;
                border: 1px solid #987;
                border-collapse: collapse; 
                border-spacing: 0; 
            }
            #printMe td,
            #printMe th {
                border: 1px solid #999;
            }
            }
        </style>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"
            integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
            crossorigin="anonymous">
        </script>

        <script>
            jQuery(function ($) {
                const tableToPrint = document.getElementById('printMe');

                function printData(tableToPrint) {
                    Popup($(tableToPrint).html());
                }

                function Popup(data) {
                    const mywindow = window.open('', 'printMe', 'height=600, width=1000');

                    mywindow.document.write('<link rel="stylesheet" href="{% static "main/css/style.css" %}">');
                    mywindow.document.write(tableToPrint.outerHTML);
                    mywindow.document.close(); // для IE >= 10 
                    mywindow.focus();          // для IE >= 10 
                    mywindow.print();
                    mywindow.close();
                    return true;
                }

                $(document).on('click', '#printTable', function () {
                    printData();
                    return false;
                });
            });
        </script>
            <col style="width:2%"> 
            <col style="width:30%"> 
            <col style="width:10%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%">
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%"> 
            <col style="width:2%">
            <col style="width:2%">  
            <col style="width:2%"> 
            <col style="width:2%"> 
            <tr>
                <td colspan="3"></td>
                <td colspan="31">Ведомость учета часов преподавателей</td>
                <td colspan="2"></td>
            </tr>
            <tr>
                <td colspan="3">Фамилия и имя преподавателя: {{user.first_name}} {{user.last_name}}</td>
                <td colspan="31">Месяц: Сентябрь</td>
                <td colspan="2">Год: 2021</td>
            </tr>
            <tr>
                <td rowspan="2">Группа</td>
                <td rowspan="2">Предмет</td>
                <td rowspan="2" >Всего часов</td>
                <td colspan="31">Числа месяца</td>
                <td rowspan="2" colspan="2">Дано часов за месяц</td>
            </tr>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
                <td>6</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
                <td>10</td>
                <td>11</td>
                <td>12</td>
                <td>13</td>
                <td>14</td>
                <td>15</td>
                <td>16</td>
                <td>17</td>
                <td>18</td>
                <td>19</td>
                <td>20</td>
                <td>21</td>
                <td>22</td>
                <td>23</td>
                <td>24</td>
                <td>25</td>
                <td>26</td>
                <td>27</td>
                <td>28</td>
                <td>29</td>
                <td>30</td>
                <td>31</td>
            </tr>
            <tr>
            {% for i in result %}
                <tr>
                {% if i.teacher_name == user.first_name %}
                    <td>{{ i.group_name }}</td>
                    <td>{{ i.subject_name  }}</td>
                    <td>{{ i.sum }}</td>
                    {% for j in i.hours %}
                        <td>{{ j }}</td>
                    {% endfor %}
                    <td colspan="2">{{ i.all_hours }}</td>
                {% endif %}
                </tr>
            {% endfor %}
        </table>
      </div>
  </main>
{% endblock %}

После совета @ZaArs, на страницу -> redactor_hours, действительно стало переходить, но теперь я не могу вернуться со страницы redactor_hours на страницу check_hours, получаю ошибку:

MultiValueDictKeyError at /teachers/dates/check_hours/

'month'

При этом URL, уже формируется "почти корректно":

http://127.0.0.1:7000/teachers/dates/check_hours/?monthapril

StackTrace прикладываю: введите сюда описание изображения

UPD: Решил проблему, добавлением знака '=', после ?month, в шаблоне redactor_hours, пример:

  <li><button   onclick="window.location.href='{% url "check_hours"  %}?month={{month_}}'">Вернуться</button></li>

Ответы (0 шт):