def calc_tags(food_no, lang_code="en", limit=1): # 객관적 태그 tags = [ googleCloudService.translate( Food.objects.get(food_no=food_no).food_class_no.food_class_en_name, lang_code) ] # 주관적 태그 food_tags_qs = MapFoodTag.objects.filter(food_no=food_no) if food_tags_qs.exists(): subj_tags = food_tags_qs.distinct().values_list('tag_no', flat=True) subj_tags_cnt = [] for subj_tag in subj_tags: subj_tags_cnt.append(food_tags_qs.filter(tag_no=subj_tag).count()) idx_sorted_cnt = np.argsort(subj_tags_cnt) subj_tags = np.array(subj_tags)[idx_sorted_cnt[::-1]] # 3가지 선택 for i in range(len(subj_tags)): if i > limit: break tags.append( googleCloudService.translate( Tag.objects.get(tag_no=subj_tags[i]).tag_en_name, lang_code)) return list(tags)
def get_foods_by_queryset(foods, lang_code): data_foods = [] for food in foods.values(): tags = calc_tags(food['food_no'], lang_code) allergies = calc_allergys(food['food_no'], lang_code) food['food_dsc'] = googleCloudService.translate( food['food_dsc'], lang_code) food['translated_name'] = googleCloudService.translate( food['food_name'], lang_code) food['tag'] = tags food['allergy'] = allergies data_foods.append(food) return data_foods
def get_foods_by_list(foods, lang_code): data_foods = [] for food_no in foods: tags = calc_tags(food_no, lang_code) allergies = calc_allergys(food_no, lang_code) food = GetFoodSerializer(Food.objects.get(food_no=food_no)).data food['food_dsc'] = googleCloudService.translate( food['food_dsc'], lang_code) food['translated_name'] = googleCloudService.translate( food['food_name'], lang_code) food['tag'] = tags food['allergy'] = allergies data_foods.append(food) return data_foods
def calc_allergys(food_no, lang_code): allergies_name, allergies_no = [], [] ingredients = MapFoodIngre.objects.filter(food_no=food_no).values_list( 'ingre_no', flat=True) for ingredient in ingredients: # 음식에 포함된 알레르기 정보 allergy = Ingredient.objects.get(ingre_no=ingredient).allergy_no allergy_no = allergy.allergy_no if allergy_no != 0 and allergy_no not in allergies_no: allergies_no.append(allergy_no) allergies_name.append( googleCloudService.translate(allergy.allergy_en_name, lang_code)) return allergies_name
def get_user_review(request): if request.method == "POST": try: data = JSONParser().parse(request) user_no = data['user_no'] lang_code = User.objects.get(user_no=user_no).lang_no.lang_code reviews = Review.objects.filter(user_no=user_no) review_list = [] if reviews.exists(): for review in reviews.values(): food = Food.objects.get(food_no=review['food_no_id']) review['food_name'] = food.food_name review['translated_name'] = googleCloudService.translate( food.food_name, lang_code) review['food_img_url'] = food.food_img_url review_list.append(review) return JsonResponse(review_list, safe=False, status=200) else: return JsonResponse([], safe=False, status=201) except KeyError: return JsonResponse({"message": "INVALID_KEY"}, status=400)