Django Rest Framework не протаскивает данные
Я пытаюсь получить данные из моей модели с помощью DRF. Это мой первый опыт использования, поэтому я пытаюсь понять, что я делаю неправильно. Представленный ниже вид выводит пустой список в API для "chartdata". Может ли кто-нибудь помочь с тем, что я делаю неправильно? Я бы хотел сначала получить данные, а моя конечная цель - получить данные и отобразить их на графике с помощью chart.js в представлении 'health_hub_tracker'. Один шаг за раз! Любая помощь будет оценена по достоинству!
views.py:
class ChartData(APIView):
authentication_classes = []
permission_classes = []
def get(self, request, format=None):
labels = "weight (lbs)"
chartLabel = "weight (lbs)"
serialized_stats = []
for stats in HealthStats.objects.filter(user=request.user.id):
serialized_stats.append({
"weight": stats.weight,
})
data = {
"labels": labels,
"chartLabel": chartLabel,
"chartdata": serialized_stats,
}
return Response(data)
models.py:
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from cloudinary.models import CloudinaryField
class HealthStats(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
weight = models.DecimalField(max_digits=5, decimal_places=2)
run_distance = models.DecimalField(max_digits=5, decimal_places=2)
run_time = models.DurationField()
class Meta:
db_table = 'health_stats'
ordering = ['-date']
def get_absolute_url(self):
return reverse('HealthHub:health_hub_history')
def __str__(self):
return f"{self.user} | {self.date}"
class Article(models.Model):
title = models.CharField(max_length=200, unique=True)
topic = models.CharField(max_length=200)
featured_image = CloudinaryField('image', default='placeholder')
content = models.TextField()
def __str__(self):
return f"{self.title}"
urls.py:
from django.urls import path
from django.contrib.staticfiles.storage import staticfiles_storage
from django.views.generic.base import RedirectView
from . import views
app_name = 'HealthHub'
urlpatterns = [
path('', views.home, name='home'),
path('MyHealth/', views.health_hub, name='health_hub'),
# path('MyHealth/history/tracker', views.health_hub_tracker, name='health_hub_tracker'),
path('MyHealth/update', views.UpdateHealth.as_view(), name='health_hub_update'),
path('MyHealth/history', views.health_history, name='health_hub_history'),
path('favicon.ico', RedirectView.as_view(url=staticfiles_storage.url("favicon.ico"))),
path('MyHealth/delete/<int:pk>', views.DeleteEntry.as_view(), name='health_hub_delete'),
path('MyHealth/edit/<int:pk>', views.EditHealth.as_view(), name='health_hub_edit'),
path('article/<item_id>', views.article_detail, name='health_hub_article'),
path('api', views.ChartData.as_view(), name='health_hub_tracker'),
]
health_hub_tracker.html:
{% extends 'base.html' %}
{% load static %}
{% block content %}
<h1>Weight Tracker</h1>
<canvas id="myChartline" width="400" height="200"></canvas>
<script>
const endpoint = '/api';
$.ajax({
method: "GET",
url: endpoint,
success: function(data) {
drawLineGraph(data, 'myChartline');
console.log("Creating");
},
error: function(error_data) {
console.log(error_data);
}
})
function drawLineGraph(data, id) {
const labels = data.labels;
const chartLabel = data.chartLabel;
const chartdata = data.chartdata;
const ctx = document.getElementById('myChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ['Weight'],
datasets: [{
label: 'Weight (lbs)',
data: [chartdata],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
{% endblock content %}