우기의 알 블로그 저자 한승욱이라고 합니다.
스스로 알을 깨고 나오는 새처럼
언젠가 알을 깨고 온전한 나 자신이 되었을 때, 그때를 기다리며 제 속에서 솟아 나오는 것을 글로써 표현하고자 합니다.
'개발 기술블로그'를 위주로 저 한승욱의 다양한 관심사, 생각, 철학 등을 포스팅합니다.
def save(self, force_insert=False, force_update=False, *args, **kwargs):
super(Log, self).save(force_insert, force_update, *args, **kwargs)
# you can add this for only existing model object
if self.sensor_id:
# You can check if only 'price' field changed
masked_avg = Log.objects.filter(sensor_id=self.sensor_id, time=self.time).aggregate(Avg('masked'))['masked__avg']
unmasked_avg = Log.objects.filter(sensor_id=self.sensor_id, time=self.time).aggregate(Avg('unmasked'))['unmasked__avg']
masked_avg = round(masked_avg)
unmasked_avg = round(unmasked_avg)
exist = AverageLog.objects.filter(average_time=self.time, sensor_id=self.sensor_id)
if exist:
exist.update(average_masked=masked_avg, average_unmasked=unmasked_avg)
else:
AverageLog.objects.create(average_time=self.time, sensor_id=self.sensor_id, average_masked=masked_avg, average_unmasked=unmasked_avg)
특정 테이블의 데이터가 생성될 시 자동으로 다른 테이블 데이터 생성
상황
오른쪽과 같은 구조인데 원리는 이렇다.
특정 데이터 형식을 수신할때마다 로그에 남기고 해당 로그가 생성될때마다 시간대별 평균을 자동으로 생성해야 하는 상황이다.
Log에 아래와 같은 형식으로 데이터가 들어갈텐데,
Average_Log 테이블에는 여기서 sensor_id와 time을 기준으로 일 마다 시간대별 평균을 자동으로 만들어줘야 한다.
참고 자료
구현 코드
'기술개발 > Django' 카테고리의 다른 글