>>> '{:.1f}'.format(StarRating.objects.filter(cafe_id=2).aggregate(average = Avg('score'))['average'] )
'3.5'
>>> '{:.1f}'.format(StarRating.objects.filter(cafe_id=4).aggregate(average = Avg('score'))['average'] )
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: unsupported format string passed to NoneType.__format__
format 함수에서 오류가 났다.
TypeError: unsupported format string passed to NoneType.
__format__
아마 cafe_id=4의 별점 데이터베이스에 아무것도 존재하지 않아서 None이 format 함수에 들어가자 오류가 발생한 듯 하다.
>>> '{:1f}'.format(None)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: unsupported format string passed to NoneType.__format__
format 함수에 None을 넣으면 똑같은 오류가 발생한다.
어떻게 해결해야 할까? 🤔
for recommended_cafe in recommended_cafes:
average_score = StarRating.objects.filter(cafe_id=recommended_cafe.id).aggregate(average = Avg('score'))['average']
if average_score != None:
recommendation.append({
'cafe_name' : recommended_cafe.name,
'average_star_rating': '{:.1f}'.format(average_score),
'cafe_image' : recommended_cafe.main_image_url
}
)
else:
recommendation.append({
'cafe_name' : recommended_cafe.name,
'average_star_rating': '0',
'cafe_image' : recommended_cafe.main_image_url
}
)
average_score가 None이 아닐시(데이터베이스에 데이터가 존재할 시) format 함수의 결과를 append해주고 None일 시 (데이터베이스에 데이터 존재하지 않을 시) 0을 출력하게 해주었다.
"recommendation": [
{
"cafe_name": "모리츠 플라츠",
"average_star_rating": "2.7",
"cafe_image": "https://i.imgur.com/pzMvbm8.jpg"
},
{
"cafe_name": "alwaysau8ust",
"average_star_rating": "0",
"cafe_image": "https://i.imgur.com/99meB8B.jpg"
},
{
"cafe_name": "braunhaus",
"average_star_rating": "0",
"cafe_image": "https://i.imgur.com/ut17HVO.jpg"
},
{
"cafe_name": "모리츠 플라워",
"average_star_rating": "2.0",
"cafe_image": "https://i.imgur.com/pzMvbm8.jpg"
},
{
"cafe_name": "alwayshungry",
"average_star_rating": "0",
"cafe_image": "https://i.imgur.com/99meB8B.jpg"
},
{
"cafe_name": "브라운해우소",
"average_star_rating": "0",
"cafe_image": "https://i.imgur.com/ut17HVO.jpg"
}
]
None일때는 0, None이 아닐때는 평균값이 잘 출력된다.