Django JsonResponse возвращает 'Year and month parameters are required', несмотря на присутствие параметров в request.GET

Я использую 'fullcalendar' и хочу отправить месяц и год в django view и получить общее количество часов для каждого дня в этом месяце из этого api: 'api/get_calendar_data/', чтобы правильно отобразить календарь. Но затем я получаю неожиданный ответ, в котором говорится, что ему нужны параметры, в то время как они присутствуют в запросе.

Я предоставлю код, и вы поймете, что я делаю.
dashboard.html:

<div id="calendar"></div>
<script src="{% static 'js/calendar.js' %}"></script>

calendar.js:

function updateCalendar(month, year) {
  console.log(year);
  console.log(month);
  $.ajax({
    url: "/api/get_calendar_data/", // to my django view to fetch data
    method: "GET",
    data: { year: year, month: month }, // to django view to send month and year
    success: function (data) {
      // data = { '2024-02-01': 5, '2024-02-02': 7, ..}
      for (let date in data) {
        let hoursWorked = parseFloat(data[date]);
        let calendarDate = new Date(date);
        let formattedDate = calendarDate.toISOString().slice(0, 10); //to get the day number 2024-04-23 -> 23
        let dayElement = calendarEl.querySelector(
          `[data-date="${formattedDate}"]`
        );
        if (hoursWorked >= 7) {
          dayElement.style.backgroundColor = "#5cb85c"; //finished work
        } else {
          dayElement.style.backgroundColor = "#d9534f"; //not inished
        }
      }
    },
    error: function (xhr, status, error) {
      console.error("Error fetching calendar data:", error);
    },
  });
}

//initialize the fullcalendar
document.addEventListener("DOMContentLoaded", function () {
  let calendarEl = document.getElementById("calendar");
  let calendar = new FullCalendar.Calendar(calendarEl, {});

  calendar.render();
  let currentDate = calendar.getDate();
  let currentMonth = currentDate.getMonth() + 1;
  let currentYear = currentDate.getFullYear();
  updateCalendar(currentMonth, currentYear); //passing month and year
});

views.py:

class CalendarDataView(View):
    def get_firstday_lastday_specific_month(self, year, month):
        first_day_current_month = date(year, month, 1)
        last_day_current_month = date(year, month, calendar.monthrange(year, month)[1])
        return first_day_current_month, last_day_current_month

    def get(self, request):
        print("request.GET: " ,request.GET)
        if 'year' in request.GET and 'month' in request.GET:
            try:
                year = int(request.GET.get("year"))
                month = int(request.GET.get("month"))
                print("year + month = ", year + month)

                start_date, end_date = self.get_firstday_lastday_specific_month(year, month)

                all_month_days = {str(start_date + timedelta(days=i)): 0 for i in range((end_date - start_date).days + 1)}

                data = ActivityLogs.objects.filter(user=request.user, date__range=[start_date, end_date]) \
                                            .values('date') \
                                            .annotate(total_hours=Sum('hours_worked')) \
                                            .order_by("date")

                for item in data:
                    all_month_days[str(item['date'])] = item['total_hours']

                return JsonResponse(all_month_days)
            except Exception as e:
                return JsonResponse({'error': str(e)}, status=500)
        else:
            return JsonResponse({'error': 'Year and month parameters are required'}, status=400)

url:

    path('api/get_calendar_data/', views.CalendarDataView.as_view(), name='get_calendar_data'),

и единственный ответ, который я получаю:

{
    "error": "Year and month parameters are required"
}

даже несмотря на то, что я запрос в печати в представлении печатаю вместе с "год+месяц":

request.GET:  <QueryDict: {'month': ['2'], 'year': ['2024']}>
2026

Я просто не понимаю, почему бы не вернуть dict с данными проберри?

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