Issue
when i try send data with this code:
class MeterData1(APIView):
def get(self, request, formate=None):
queryset = PowerMeter.objects.all(id=10)
serializer = PowerMeterSerializer(data=queryset,many=True)
if serializer.is_valid():
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
I encounter this error:
{
"non_field_errors": [
"Invalid data. Expected a dictionary, but got QuerySet."
]
}
and this is my serializer :
class PowerMeterSerializer(serializers.ModelSerializer):
class Meta:
model = PowerMeter
fields = '__all__'
and model:
class PowerMeter(models.Model):
meter_id = models.CharField(max_length=127)
State = models.ForeignKey(State, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now=True, blank=True)
VII1 = models.PositiveIntegerField(default=0, blank=True)
VII2 = models.PositiveIntegerField(default=0, blank=True)
VII3 = models.PositiveIntegerField(default=0, blank=True)
VII_avg = models.PositiveIntegerField(default=0, blank=True)
Vln1 = models.PositiveIntegerField(default=0, blank=True)
Vln2 = models.PositiveIntegerField(default=0, blank=True)
Vln3 = models.PositiveIntegerField(default=0, blank=True)
Vln_avg = models.PositiveIntegerField(default=0, blank=True)
I1 = models.PositiveIntegerField(default=0, blank=True)
I2 = models.PositiveIntegerField(default=0, blank=True)
I3 = models.PositiveIntegerField(default=0, blank=True)
I_avg = models.PositiveIntegerField(default=0, blank=True)
P1 = models.PositiveIntegerField(default=0, blank=True)
P2 = models.PositiveIntegerField(default=0, blank=True)
P3 = models.PositiveIntegerField(default=0, blank=True)
P_total = models.PositiveIntegerField(default=0, blank=True)
Q1 = models.PositiveIntegerField(default=0, blank=True)
Q2 = models.PositiveIntegerField(default=0, blank=True)
Q3 = models.PositiveIntegerField(default=0, blank=True)
Q_total = models.PositiveIntegerField(default=0, blank=True)
S1 = models.PositiveIntegerField(default=0, blank=True)
S2 = models.PositiveIntegerField(default=0, blank=True)
S3 = models.PositiveIntegerField(default=0, blank=True)
S_total = models.PositiveIntegerField(default=0, blank=True)
PF1 = models.PositiveIntegerField(default=0, blank=True)
PF2 = models.PositiveIntegerField(default=0, blank=True)
PF3 = models.PositiveIntegerField(default=0, blank=True)
PF_totalMax_Demand_import = models.PositiveIntegerField(default=0, blank=True)
Max_Demand_export = models.PositiveIntegerField(default=0, blank=True)
Current_Demand = models.PositiveIntegerField(default=0, blank=True)
Frequency = models.PositiveIntegerField(default=0, blank=True)
Unb_V = models.PositiveIntegerField(default=0, blank=True)
Unb_I = models.PositiveIntegerField(default=0, blank=True)
In = models.PositiveIntegerField(default=0, blank=True)
I managed to get data using "ListCreateAPIView" but for some reason I don't want to use it
i tried:
serializer = PowerMeterSerializer(data=queryset)
but got:
{
"non_field_errors": [
"Invalid data. Expected a dictionary, but got QuerySet."
]
}
When I printed "serializer.data" I found that it was not part of the data here is data:
[OrderedDict([('id', 6), ('meter_id', '323123'), ('date', '2023-12-13T15:35:23.767942Z'), ('VII1', 220), ('VII2', 220), ('VII3', 220), ('VII_avg', 220), ('Vln1'
, 65), ('Vln2', 65), ('Vln3', 65), ('Vln_avg', 65), ('I1', 10), ('I2', 10), ('I3', 10), ('I_avg', 10), ('P1', 10), ('P2', 10), ('P3', 10), ('P_total', 10), ('Q1
', 23), ('Q2', 20), ('Q3', 32), ('Q_total', 54), ('S1', 32), ('S2', 35), ('S3', 66), ('S_total', 66), ('PF1', 88), ('PF2', 88), ('PF3', 88), ('PF_totalMax_Deman
d_import', 89), ('Max_Demand_export', 90), ('Current_Demand', 35), ('Frequency', 22), ('Unb_V', 3), ('Unb_I', 10), ('In', 10), ('State', 2)]), OrderedDict([('id
', 7), ('meter_id', '313123'), ('date', '2023-12-13T15:37:42.712157Z'), ('VII1', 12), ('VII2', 12), ('VII3', 12), ('VII_avg', 15), ('Vln1', 41), ('Vln2', 41), (
'Vln3', 41), ('Vln_avg', 15), ('I1', 35), ('I2', 35), ('I3', 35), ('I_avg', 85), ('P1', 12), ('P2', 12), ('P3', 12), ('P_total', 15), ('Q1', 15), ('Q2', 16), ('
Q3', 18), ('Q_total', 18), ('S1', 18), ('S2', 14), ('S3', 71), ('S_total', 65), ('PF1', 31), ('PF2', 32), ('PF3', 46), ('PF_totalMax_Demand_import', 76), ('Max_
8), ('Unb_V', 98), ('Unb_I', 65), ('In', 65), ('State', 2)])]
But it should be this:
[OrderedDict([('id', 6), ('meter_id', '323123'), ('date', '2023-12-13T15:35:23.767942Z'), ('VII1', 220), ('VII2', 220), ('VII3', 220), ('VII_avg', 220), ('Vln1'
, 65), ('Vln2', 65), ('Vln3', 65), ('Vln_avg', 65), ('I1', 10), ('I2', 10), ('I3', 10), ('I_avg', 10), ('P1', 10), ('P2', 10), ('P3', 10), ('P_total', 10), ('Q1
', 23), ('Q2', 20), ('Q3', 32), ('Q_total', 54), ('S1', 32), ('S2', 35), ('S3', 66), ('S_total', 66), ('PF1', 88), ('PF2', 88), ('PF3', 88), ('PF_totalMax_Deman
d_import', 89), ('Max_Demand_export', 90), ('Current_Demand', 35), ('Frequency', 22), ('Unb_V', 3), ('Unb_I', 10), ('In', 10), ('State', 2)]), OrderedDict([('id
', 7), ('meter_id', '313123'), ('date', '2023-12-13T15:37:42.712157Z'), ('VII1', 12), ('VII2', 12), ('VII3', 12), ('VII_avg', 15), ('Vln1', 41), ('Vln2', 41), (
'Vln3', 41), ('Vln_avg', 15), ('I1', 35), ('I2', 35), ('I3', 35), ('I_avg', 85), ('P1', 12), ('P2', 12), ('P3', 12), ('P_total', 15), ('Q1', 15), ('Q2', 16), ('
Q3', 18), ('Q_total', 18), ('S1', 18), ('S2', 14), ('S3', 71), ('S_total', 65), ('PF1', 31), ('PF2', 32), ('PF3', 46), ('PF_totalMax_Demand_import', 76), ('Max_
Demand_export', 32), ('Current_Demand', 71), ('Frequency', 92), ('Unb_V', 85), ('Unb_I', 67), ('In', 10), ('State', 3)]), OrderedDict([('id', 8), ('meter_id', '
132031\n'), ('date', '2023-12-13T15:43:25.306111Z'), ('VII1', 18), ('VII2', 19), ('VII3', 13), ('VII_avg', 71), ('Vln1', 16), ('Vln2', 64), ('Vln3', 91), ('Vln_
avg', 37), ('I1', 85), ('I2', 73), ('I3', 45), ('I_avg', 48), ('P1', 56), ('P2', 12), ('P3', 19), ('P_total', 20), ('Q1', 30), ('Q2', 40), ('Q3', 50), ('Q_total
', 60), ('S1', 74), ('S2', 61), ('S3', 13), ('S_total', 40), ('PF1', 19), ('PF2', 14), ('PF3', 14), ('PF_totalMax_Demand_import', 54), ('Max_Demand_export', 75)
, ('Current_Demand', 51), ('Frequency', 87), ('Unb_V', 13), ('Unb_I', 74), ('In', 52), ('State', 2)]), OrderedDict([('id', 9), ('meter_id', '131531'), ('date',
'2023-12-13T15:46:57.291928Z'), ('VII1', 16), ('VII2', 14), ('VII3', 15), ('VII_avg', 54), ('Vln1', 75), ('Vln2', 12), ('Vln3', 13), ('Vln_avg', 12), ('I1', 48)
, ('I2', 14), ('I3', 12), ('I_avg', 31), ('P1', 45), ('P2', 87), ('P3', 54), ('P_total', 17), ('Q1', 45), ('Q2', 54), ('Q3', 13), ('Q_total', 74), ('S1', 64), (
'S2', 17), ('S3', 34), ('S_total', 76), ('PF1', 34), ('PF2', 46), ('PF3', 12), ('PF_totalMax_Demand_import', 43), ('Max_Demand_export', 43), ('Current_Demand',
75), ('Frequency', 24), ('Unb_V', 73), ('Unb_I', 74), ('In', 43), ('State', 3)]), OrderedDict([('id', 10), ('meter_id', '221316'), ('date', '2023-12-13T15:49:39
.938396Z'), ('VII1', 15), ('VII2', 65), ('VII3', 95), ('VII_avg', 47), ('Vln1', 32), ('Vln2', 48), ('Vln3', 74), ('Vln_avg', 64), ('I1', 14), ('I2', 54), ('I3',
42), ('I_avg', 21), ('P1', 21), ('P2', 12), ('P3', 46), ('P_total', 24), ('Q1', 17), ('Q2', 23), ('Q3', 32), ('Q_total', 5), ('S1', 54), ('S2', 546), ('S3', 65
), ('S_total', 56), ('PF1', 56), ('PF2', 56), ('PF3', 98), ('PF_totalMax_Demand_import', 54), ('Max_Demand_export', 56), ('Current_Demand', 54), ('Frequency', 7
8), ('Unb_V', 98), ('Unb_I', 65), ('In', 65), ('State', 2)])]
Solution
It should not be , data=…
data=…
is when you use the serializer in the opposite way: to generate objects out of data from the client, so:
serializer = PowerMeterSerializer(queryset, many=True)
or as instance=…
if you want to use a named parameter:
serializer = PowerMeterSerializer(instance=queryset, many=True)
Note: Please don't store aggregates in the model: determine aggregates when needed: storing aggregates in the model makes updating and keeping data in sync harder.
Answered By - willeM_ Van Onsem
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.