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()
コードコメントの変更3detail_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]
コードコメントの変更4review_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-queryif product:
# 위에서 get 으로 product 를 뽑아온 상황에서, 객체가 없다면 Product.DoesNotExist 에러 헨들링으로 잡아주고 있기 때문에, if product는 언제나 참이 된다. 따라서 가정해주지 않아도 된다.
Reference
この問題について(Python&Djangoコードコメント#2), 我々は、より多くの情報をここで見つけました https://velog.io/@pm1100tm/PythonDjango-코드-리뷰テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol