У меня есть таблица базы данных:
servicenumber | meternumber | usagedatetime | usage
11111 | 22222 | 2019-01-01 | 1.85
11111 | 22222 | 2019-01-02 | 2.25
11111 | 22222 | 2019-01-03 | 1.55
11111 | 22222 | 2019-01-04 | 2.15
11111 | 33333 | 2019-02-01 | 2.95
11111 | 33333 | 2019-02-02 | 3.95
11111 | 33333 | 2019-02-03 | 2.05
11111 | 33333 | 2019-02-04 | 3.22
Как видите, сервисный номер может быть связан с несколькими номерами счетчиков. Думайте о сервисном номере как об уникальном идентификаторе географического местоположения, которое не меняется.
И у меня есть модель Django:
class MeterUsage(models.Model):
objectid = models.IntegerField(
db_column='OBJECTID', unique=True, primary_key=True)
servicenumber = models.IntegerField(
db_column='serviceNumber', blank=True, null=True)
meternumber = models.IntegerField(
db_column='meterNumber', blank=True, null=True)
usagedatetime = models.DateTimeField(
db_column='usageDateTime', blank=True, null=True)
usage = models.DecimalField(
max_digits=38, decimal_places=8, blank=True, null=True)
А у меня есть базовый сериализатор:
class MeterUsageSerializer(serializers.ModelSerializer):
class Meta:
model = MeterUsage
fields = (
'usagedatetime',
'usage'
)
И текущий ответ:
[
{
"usagedatetime": "2019-01-01",
"usage": "1.85"
},
{
"usagedatetime": "2019-01-02",
"usage": "2.25"
},
{
"usagedatetime": "2019-01-03",
"usage": "1.55"
},
....
]
Но то, что я действительно хочу, - это (нужно использовать разделение по номеру счетчика):
[
{
"servicenumber": "11111",
"meternumber": "22222",
"usagedata": [
{
"usagedatetime": "2019-01-01",
"usage": "1.85"
},
{
"usagedatetime": "2019-01-02",
"usage": "2.25"
},
{
"usagedatetime": "2019-01-03",
"usage": "1.55"
},
{
"usagedatetime": "2019-01-04",
"usage": "2.15"
},
...
]
},
{
"servicenumber": "11111",
"meternumber": "33333",
"usagedata": [
{
"usagedatetime": "2019-02-01",
"usage": "2.95"
},
{
"usagedatetime": "2019-02-02",
"usage": "3.95"
},
{
"usagedatetime": "2019-02-03",
"usage": "2.05"
},
{
"usagedatetime": "2019-02-04",
"usage": "3.22"
},
...
]
},
...
]
Моя конечная цель - отобразить эти данные в виде линейной диаграммы с использованием библиотеки ChartJS в приложении Angular 7, и данные должны быть в следующем формате:
chartData = [
{
label: '22222',
data: [1.85, 2.25, 1.55, 2.15]
},
{
label: '33333',
data: [2.95, 3.95, 2.05, 3.22]
}
];
Можно ли использовать сериализатор для форматирования данных, как я показал выше? Я пробовал разные методы, основанные на различных уроках, которые я прочитал, но, похоже, ничего не работает, и теперь я просто не понимаю, как с этим справиться.
Любое понимание приветствуется!