티스토리 뷰
서론
Rest Framework로 작업하던 중 관계가 있는 특정 쿼리셋(예를 들어 첫번째 레코드만)만 지정해서 Serialize하는 방법을 소개합니다.
본론
다음과 같이 1:N관계인 account와 helathData 모델이 있습니다.
class Account(models.Model):
email = models.EmailField()
password = models.CharField()
note = models.TextField()
class HealthData(models.Model):
account = models.ForeignKey(to=HuamiAccount,
on_delete=models.CASCADE
related_name="health")
date = models.DateField()
heart_rate = models.TextField()
이 상태에서 serializer를 사용할 때 가장 최근 healthData를 가져오는 것을 구현합니다.
property로 쿼리셋 지정하기
Account 모델에서 가장 최근의 HealthData를 가져오는 property를 작성합니다. queryset을 작성하여 적절한 레코드를 가져옵니다.
class Account(models.Model):
email = models.EmailField()
password = models.CharField()
note = models.TextField()
@property
def last_health(self):
return self.health.last()
serializer 작성하기
last_health 라는 이름으로 만든 property를 HelathSerializer를 이용해 시리얼라이즈화 합니다.
class HealthSerializer(serializers.ModelSerializer):
class Meta:
model = HealthData
fields = ['date', 'heart_rate']
class AccountSerializer(serializers.ModelSerializer):
last_health = HealthSerializer()
class Meta:
model = Account
fields = ['email', 'note', 'last_health']
결과
위의 시리얼라이저를 사용한 detail 뷰를 만들어 조회해보았습니다.
{
"full_name": "이 누렁",
"note": "아름다운 금수강산",
"last_health_info": {
"date": "2023-08-10",
"heart_rate": "top secrect"
}
}
결론
시리얼라이저 자체에서 쿼리셋을 만들어 사용하는 방법도 찾아보고는 있는데 찾지 못해서 위와 같은 방법으로 대체했습니다. 더 찾아보면 좋을 것 같습니다.
'개발자 > 파이썬(Python)' 카테고리의 다른 글
| [Django] pycharm Django test 설정하기 (0) | 2024.09.05 |
|---|---|
| [Pytorch] Docker를 이용해 Jupyter 서버 만들기 (0) | 2024.06.14 |
| [Django] ViewSet에서 action마다 다른 permission 적용하기 (0) | 2024.02.20 |
| [Django] DRF로 Token 로그인 구현 (0) | 2024.02.16 |
| [Python] Re 패키지로 정규표현식 사용하기 (0) | 2024.02.03 |
