Fix Entry issue
This commit is contained in:
@ -4,6 +4,7 @@ from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from django.db import IntegrityError
|
||||
from django.conf import settings
|
||||
from django.urls import reverse
|
||||
@ -851,12 +852,22 @@ class EntrySerializer(serializers.ModelSerializer):
|
||||
|
||||
def to_representation(self, instance):
|
||||
ret = super().to_representation(instance)
|
||||
ret['team'] = TeamSerializer(instance.team).data
|
||||
ret['event'] = NewEvent2Serializer(instance.event).data
|
||||
ret['category'] = NewCategorySerializer(instance.category).data
|
||||
ret['owner'] = CustomUserSerializer(instance.owner).data
|
||||
|
||||
# instance が辞書の場合(エラー時)は基本情報のみ返す
|
||||
if isinstance(instance, dict):
|
||||
return ret
|
||||
|
||||
# 正常な場合のみ関連オブジェクトを追加
|
||||
if hasattr(instance, 'team') and instance.team:
|
||||
ret['team'] = TeamSerializer(instance.team).data
|
||||
if hasattr(instance, 'event') and instance.event:
|
||||
ret['event'] = NewEvent2Serializer(instance.event).data
|
||||
if hasattr(instance, 'category') and instance.category:
|
||||
ret['category'] = NewCategorySerializer(instance.category).data
|
||||
if hasattr(instance, 'owner') and instance.owner:
|
||||
ret['owner'] = CustomUserSerializer(instance.owner).data
|
||||
|
||||
if isinstance(ret['date'], datetime):
|
||||
if isinstance(ret.get('date'), datetime):
|
||||
ret['date'] = ret['date'].date().isoformat()
|
||||
elif isinstance(ret['date'], date):
|
||||
ret['date'] = ret['date'].isoformat()
|
||||
|
||||
27
rog/views.py
27
rog/views.py
@ -1748,7 +1748,11 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
else:
|
||||
logger.info("External system registered successfully")
|
||||
except Exception as e:
|
||||
logger.exception(f"Error creating Entry: {str(e)}")
|
||||
logger.error(f"Error creating Entry: {e}")
|
||||
if hasattr(e, 'message_dict'):
|
||||
logger.error(f"Validation details: {e.message_dict}")
|
||||
# perform_createで例外を発生させて、createメソッドでキャッチ
|
||||
raise e
|
||||
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
@ -1768,7 +1772,26 @@ class EntryViewSet(viewsets.ModelViewSet):
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
except DjangoValidationError as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
|
||||
# バリデーションエラーの詳細をログに記録
|
||||
error_details = e.message_dict if hasattr(e, 'message_dict') else str(e)
|
||||
logger.error(f"Entry validation error: {error_details}")
|
||||
|
||||
# ユーザーフレンドリーなエラーメッセージを作成
|
||||
if '__all__' in error_details and '男性のみ参加可能' in str(error_details):
|
||||
error_message = "選択されたカテゴリーは男性のみ参加可能です。適切なカテゴリーを選択してください。"
|
||||
elif '__all__' in error_details and '女性のみ参加可能' in str(error_details):
|
||||
error_message = "選択されたカテゴリーは女性のみ参加可能です。適切なカテゴリーを選択してください。"
|
||||
else:
|
||||
error_message = str(e)
|
||||
|
||||
return Response({"error": error_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
except Exception as e:
|
||||
# その他のエラー
|
||||
logger.exception(f"Unexpected error creating Entry: {str(e)}")
|
||||
return Response(
|
||||
{"error": "エントリー作成中に予期しないエラーが発生しました。しばらく後に再試行してください。"},
|
||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
||||
)
|
||||
|
||||
|
||||
def register_team(self, zekken_number, event_code, team_name, category_name, password):
|
||||
|
||||
Reference in New Issue
Block a user