Python&Djangoコードコメント#2


コードコメント1の変更
if not type(product_id) is int:
# 이 역할을 하는 파이썬의 함수가 있다. 해당 함수를 써보도록..!
 
# 수정 후
if isinstance(product_id, int):

# isdemical 은 str 이 가지고 있는 메서드.
path parameter 로 int 형태로 받았기 때문에 isinstance 를 사용했다.
コードコメント2の変更
product = Product.objects.get(id=product_id)
product_detail_images = product.productdetailimage_set.filter(product=product)

# 이미 product 객체를 지칭했기 때문에, 이 객체의 productdetailimage_set 은 모두 해당 product 의 객체이다. 따라서 product 로 다시 filtering 을 해줄 필요가 없다.

# 수정 후
product = Product.objects.get(id=product_id)
product_detail_images = product.productdetailimage_set.all()
コードコメントの変更3
detail_images = []
if product_detail_images:
    detail_images = [images.detail_image_url for images in product_detail_images]

# 리스트 컴프리헨션은 선언 하는 그 자체만으로도 리스트를 생성해준다. 따라서 빈 리스트를 만들어 줄 필요가 없다.

# 수정 후
detail_images = [images.detail_image_url for images in product_detail_images]
コードコメントの変更4
review_points_avg = 0
if reviews:
    total_review_point = 0
    for review in reviews:
        total_review_point += review.star

# 특정 해 온 리뷰들의 평점을 구하는 로직이다. 장고에서 제공해주는 메서드가 있다.

# 수정 후
avg_reviews_point = reviews.aggregate(Sum('star')).get('star__sum') / reviews.count()

# 다시 한 번 수정 (리스트 표현식이 더 빠르다는 글을 보고 수정)
avg_reviews_point = round(sum([review.star for review in reviews]) / reviews.count())
#参照リンク:https://stackoverflow.com/questions/8616343/django-calculate-the-sum-of-the-column-values-through-query
if product:

# 위에서 get 으로 product 를 뽑아온 상황에서, 객체가 없다면 Product.DoesNotExist 에러 헨들링으로 잡아주고 있기 때문에, if product는 언제나 참이 된다. 따라서 가정해주지 않아도 된다.