From 999ce636ac136eb50885b303f55849fcdc90834b Mon Sep 17 00:00:00 2001 From: Akira Date: Fri, 29 Aug 2025 21:11:00 +0900 Subject: [PATCH] Fix no images issues --- rog/views.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/rog/views.py b/rog/views.py index 67a87a8..5869f6b 100755 --- a/rog/views.py +++ b/rog/views.py @@ -2566,6 +2566,8 @@ def get_team_info(request, zekken_number): logger.debug(f"self.rogaining={entry.event.self_rogaining} => start_datetime = -1(ロゲ開始)のcreate_at") # チームの最初のゴール時間を取得 + logger.info(f"Searching for GoalImages with team_name='{entry.team.team_name}', event_code='{entry.event.event_name}'") + goal_record = GoalImages.objects.filter( team_name=entry.team.team_name, event_code=entry.event.event_name @@ -2576,18 +2578,19 @@ def get_team_info(request, zekken_number): goaltime = None if goal_record: + logger.info(f"Found goal record: id={goal_record.id}, goaltime={goal_record.goaltime}") try: goaltime = goal_record.goaltime if goal_record.goalimage and hasattr(goal_record.goalimage, 'url'): goalimage_url = request.build_absolute_uri(goal_record.goalimage.url) logger.info(f"get_team_info record.goalimage_url={goalimage_url}") else: - logger.info("Goal record exists but no image found") + logger.info(f"Goal record exists but no image found: goalimage={goal_record.goalimage}") except ValueError as e: logger.warning(f"Error accessing goal image: {str(e)}") else: - logger.info("No goal record found for team") + logger.info(f"No goal record found for team_name='{entry.team.team_name}', event_code='{entry.event.event_name}'") return Response({ @@ -2682,6 +2685,27 @@ def get_checkins(request, *args, **kwargs): logger.debug(f"=== Searching for zekken={zekken_number}, event_code={event_code}") + # チーム情報を取得 + entry = None + try: + # まずzekken_numberで検索(数値の場合) + if zekken_number.isdigit(): + entry = Entry.objects.select_related('team','event').get(zekken_number=int(zekken_number)) + else: + # 数値でない場合はzekken_labelで検索 + entry = Entry.objects.select_related('team','event').get(zekken_label=zekken_number) + except Entry.DoesNotExist: + # zekken_numberで見つからない場合はzekken_labelで再試行 + try: + entry = Entry.objects.select_related('team','event').get(zekken_label=zekken_number) + except Entry.DoesNotExist: + # 最後にzekken_numberとして再試行(数値以外でもエラーハンドリング) + try: + entry = Entry.objects.select_related('team','event').get(zekken_number=zekken_number) + except (Entry.DoesNotExist, ValueError): + logger.warning(f"Entry not found for zekken: {zekken_number}") + entry = None + # チェックインデータの取得とCP情報の結合 checkins = GpsCheckin.objects.filter( zekken=zekken_number, @@ -2694,6 +2718,34 @@ def get_checkins(request, *args, **kwargs): for c in checkins: location = Location.objects.filter(cp=c.cp_number,group=event_code).first() + # チェックイン画像を取得 + checkin_image = None + image_url = None + + if entry and location: # entryとlocationが存在する場合のみ画像を検索 + # location.cpを使用してチェックイン画像を検索 + checkin_image = CheckinImages.objects.filter( + team_name=entry.team.team_name, + event_code=event_code, + cp_number=location.cp # location.cpを使用 + ).first() + + # 画像URLを生成 + if checkin_image and checkin_image.checkinimage: + try: + if hasattr(checkin_image.checkinimage, 'url'): + image_url = request.build_absolute_uri(checkin_image.checkinimage.url) + logger.info(f"Found checkin image for CP {location.cp} (sub_loc_id: {location.sub_loc_id}): {image_url}") + except Exception as e: + logger.warning(f"Error accessing checkin image for CP {location.cp}: {str(e)}") + else: + logger.debug(f"No checkin image found for CP {location.cp} (sub_loc_id: {location.sub_loc_id})") + else: + if not entry: + logger.warning(f"No entry found for zekken {zekken_number}, cannot search for checkin images") + if not location: + logger.warning(f"No location found for CP {c.cp_number}") + formatted_time = None if c.checkin_time: try: @@ -2721,7 +2773,7 @@ def get_checkins(request, *args, **kwargs): 'points': location.checkin_point if location else 0, # locationから取得 'buy_flag': False, # デフォルト値として設定 'photos': location.photos if location else None, - 'image_address': None, # 現在のモデルには存在しない + 'image_address': image_url, # CheckinImagesテーブルから取得した画像URL 'receipt_address': None, # 現在のモデルには存在しない 'location_name': location.location_name if location else None, 'checkin_point': location.checkin_point if location else None,