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 с данными проберри?