2 from django
.db
import models
3 from django
.db
.models
import Q
6 log
= logging
.getLogger(__name__
)
10 class Inverter(models
.Model
):
11 ref
= models
.CharField(max_length
=100) # reference
17 class HourlyProduction(models
.Model
):
18 inverter
= models
.ForeignKey(Inverter
, on_delete
=models
.CASCADE
)
19 datetime
= models
.DateTimeField()
20 energy
= models
.IntegerField()
23 unique_together
= (("inverter", "datetime"),)
26 return f
'{self.energy} @ {self.inverter}, {self.datetime}'
28 def save(self
, *args
, **kwargs
):
29 # First, compute the new daily production
30 qfilter
= Q(datetime__date
=self
.datetime
.date(),
31 inverter
=self
.inverter
)
32 sum_prod
= sum(HourlyProduction
.objects
.filter(qfilter
)
33 .values_list('energy', flat
=True))
35 # Select the daily production to be updated
36 qfilter
= Q(date
=self
.datetime
.date(), inverter
=self
.inverter
)
38 dp
= DailyProduction
.objects
.get(qfilter
)
41 log
.debug(f
"Update daily production of {dp}")
42 except DailyProduction
.DoesNotExist
:
45 # Call the save method
46 super(HourlyProduction
, self
).save(*args
, **kwargs
)
49 class DailyProduction(models
.Model
):
50 inverter
= models
.ForeignKey(Inverter
, on_delete
=models
.CASCADE
)
51 date
= models
.DateField()
52 energy
= models
.IntegerField()
55 unique_together
= (("inverter", "date"),)
58 return f
'{self.energy} @ {self.inverter}, {self.date}'