Я отправляю объект json, созданный с использованием Django rest framework, для отображения на диаграмме с помощью Chart js в приложении angular.
Json:
[{"data": "[5908, 3793, 3002, 2049, 1907]", "labels": "['0005', '0022', '0003', '0135', '0061']"}]
В приложении angular я вызываю api, чтобы получить json выше, и пытаюсь отобразить на диаграмме, как показано ниже:
import { PieData } from '@modules/charts/models/charts.model';
import { Chart } from 'chart.js';
@Component({
selector: 'sb-charts-pie',
changeDetection: ChangeDetectionStrategy.OnPush,
templateUrl: './charts-pie.component.html',
styleUrls: ['charts-pie.component.scss'],
})
export class ChartsPieComponent implements OnInit {
@ViewChild('myPieChart') myPieChart!: ElementRef<HTMLCanvasElement>;
chart!: Chart;
url = 'http://localhost:7000/products';
httpHeaders = new HttpHeaders({ 'Content-type': 'application/json' });
Data: number[] = [];
Labels: string[] = [];
constructor(private httpClient: HttpClient) {}
ngOnInit() {
this.httpClient
.get<PieData[]>(this.url, {
headers: this.httpHeaders,
})
.subscribe(result => {
result.forEach(x => {
this.Data.push(x.data);
this.Labels.push(x.labels);
console.log(this.Data);
});
this.chart = new Chart(this.myPieChart.nativeElement, {
type: 'pie',
data: {
labels: this.Labels,
datasets: [
{
data: this.Data,
backgroundColor: 'blue',
},
],
},
});
});
}
}
Класс модели для PieData как показано ниже:
export class PieData {
data!: number;
labels!: string;
}
Журнал консоли для this.Data и this.Labels отображается, как показано ниже:
["[5908, 3793, 3002, 2049, 1907]"]
["['0005', '0022', '0003', '0135', '0061']"]
Django код остальной платформы (на стороне сервера), как показано ниже:
model.py:
class Products(models.Model):
data = models.TextField()
labels= models.TextField()
serializers.py:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Products
fields = ('data',
'labels'
)
view.py:
def products(request):
labels = []
data = []
products = GetSQLData('db', 'query')
for product in products:
labels.append(product.ProdID)
data.append(product.TotalCount)
if request.method == 'GET':
objects_list = []
d = collections.OrderedDict()
d['data'] = data
d['labels'] = labels
objects_list.append(d)
products_serializer = ProductSerializer(objects_list, many=True)
return JsonResponse(products_serializer.data, safe=False)
Как отобразить приведенные выше данные в графике js? Пожалуйста, помогите !!