In the django function, I send data to JS via JSON
startdate = datetime.strptime(request.POST['startdate'], '%d.%m.%Y') enddate = datetime.strptime(request.POST['enddate'], '%d.%m.%Y') paymentparking = paidparking.objects.filter(expirationdate__range = (startdate, enddate)).values('expirationdate', 'price') return JsonResponse(dict(paymentparking))
How do I get price and expirationdate separately in JS?
$.ajax({ type: "POST", url: "statistics", data: { 'startdate': finalDateStrStart,'enddate': finalDateStrEnd, }, dataType: "json", cache: false, success:function (data) { } });
This is what I get in the django function before sending the JSON:
<QuerySet [{'expirationdate': datetime.date(2021, 4, 30), 'price': 300.0}, {'expirationdate': datetime.date(2021, 5, 5), 'price': 750.0}]>
If success:
function (data) { console.log(data) }
As a result, I get:
I need to get the price and expirationdate separately. How can this be done?
Advertisement
Answer
How do I get price and expirationdate separately in JS?
In your success
function, you can access the properties of the first item as data[0].expirationdate
and data[0].price
for example. Since you are filtering paidparking
instances, you should expect more than one.
The problem is that you are not correctly creating the JSON response. Converting a QuerySet
to a dict
won’t do what you want. Instead, just serialize the QuerySet
directly:
return JsonResponse(paymentparking, safe=False)
I set safe=False
here in order to serialize the QuerySet
as a JSON array.
Alternatively, you can serialize the QuerySet
as a value inside a dictionary:
return JsonResponse({'result': list(paymentparking))
Then you can get the array of results through data.result
in your success
function. Do whatever you want with that array from there, such as data.result[0].expirationdate
to get the expiration date for the first item.
For more information on JsonResponse
, read the docs.