diff --git a/config/settings.py b/config/settings.py index 1cd08e0..f1a6851 100644 --- a/config/settings.py +++ b/config/settings.py @@ -224,6 +224,9 @@ LEAFLET_CONFIG = { REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], 'DEFAULT_AUTHENTICATION_CLASSES': ('knox.auth.TokenAuthentication', ), + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.IsAuthenticated', + ], } diff --git a/rog/admin.py b/rog/admin.py index 0bfbff6..19fd274 100755 --- a/rog/admin.py +++ b/rog/admin.py @@ -1017,9 +1017,9 @@ class GpsLogAdmin(admin.ModelAdmin): @admin.register(GpsCheckin) class GpsCheckinAdmin(admin.ModelAdmin): - list_display = ['id', 'zekken_number', 'event_code', 'cp_number', 'create_at'] + list_display = ['id', 'zekken', 'event_code', 'cp_number', 'create_at'] list_filter = ['event_code', 'create_at', 'validate_location'] - search_fields = ['zekken_number', 'event_code', 'cp_number'] + search_fields = ['zekken', 'event_code', 'cp_number'] readonly_fields = ['create_at'] @admin.register(Checkpoint) diff --git a/rog/models.py b/rog/models.py index efa68ff..c2c956c 100755 --- a/rog/models.py +++ b/rog/models.py @@ -919,10 +919,16 @@ class GpsCheckin(models.Model): default=0, help_text="チェックポイントの順序番号" ) + zekken = models.CharField( + max_length=20, + null=True, + blank=True, + help_text="ゼッケン番号(実テーブルフィールド名に合わせて修正)" + ) zekken_number = models.TextField( null=False, default='', - help_text="ゼッケン番号" + help_text="ゼッケン番号(後方互換性のため残す)" ) event_id = models.IntegerField( null=True, @@ -1026,6 +1032,17 @@ class GpsCheckin(models.Model): blank=True, help_text="統合チームリレーション" ) + team_name = models.CharField( + max_length=255, + null=True, + blank=True, + help_text="チーム名(実テーブルフィールド)" + ) + checkin_time = models.DateTimeField( + null=True, + blank=True, + help_text="チェックイン時刻(実テーブルフィールド)" + ) checkpoint = models.ForeignKey( 'Checkpoint', on_delete=models.CASCADE, @@ -1068,9 +1085,9 @@ class GpsCheckin(models.Model): ) class Meta: - db_table = 'gps_checkins' + db_table = 'rog_gpscheckin' # 実際のテーブル名に合わせて修正 indexes = [ - models.Index(fields=['zekken_number', 'event_code', 'path_order'], name='idx_zekken_event'), + models.Index(fields=['zekken', 'event_code', 'path_order'], name='idx_zekken_event'), models.Index(fields=['create_at'], name='idx_create_at'), ] diff --git a/rog/urls.py b/rog/urls.py index 74750f5..b7e56ea 100755 --- a/rog/urls.py +++ b/rog/urls.py @@ -20,6 +20,7 @@ from .views_apis.api_admin_validation import get_event_participants_ranking, get from .views_apis.api_simulator import rogaining_simulator from .views_apis.api_test import test_gifuroge,practice from .views_apis.api_supervisor import get_events_for_supervisor +from django.views.decorators.csrf import csrf_exempt from .app_version_views import app_version_check, AppVersionManagementView from .multi_image_upload_views import multi_image_upload, image_list, image_detail from .gpx_route_views import gpx_test_data, available_routes @@ -143,7 +144,7 @@ urlpatterns += [ # for Supervisor Web app path('events/', views.get_events, name='get_events'), - path('events-supervisor/', get_events_for_supervisor, name='get_events_for_supervisor'), # 新規追加 + path('events-supervisor/', csrf_exempt(get_events_for_supervisor), name='get_events_for_supervisor'), # 新規追加 path('debug/urls/', views.debug_urls, name='debug_urls'), path('zekken_numbers//', views.get_zekken_numbers, name='get_zekken_numbers'), path('team_info//', views.get_team_info, name='get_team_info'), diff --git a/rog/views.py b/rog/views.py index adac014..344a5cb 100755 --- a/rog/views.py +++ b/rog/views.py @@ -2513,8 +2513,8 @@ def get_zekken_numbers(request, event_code): # GpsCheckinテーブルからも検索(過去の移行データ) gps_checkins = GpsCheckin.objects.filter( event_code=event_code, - zekken_number__gt=0 - ).values_list('zekken_number', flat=True).distinct().order_by('zekken_number') + zekken__gt='' + ).values_list('zekken', flat=True).distinct().order_by('zekken') gps_list = list(gps_checkins) print(f"GpsCheckin table found {len(gps_list)} records: {gps_list[:10]}") @@ -2912,9 +2912,9 @@ def _get_final_report( zekken, event_code): def _get_photo_list(zekken, event_code): photos = [] try: - print(f"Query parameters - zekken_number: {zekken}, event_code: {event_code}") + print(f"Query parameters - zekken: {zekken}, event_code: {event_code}") - checkins = GpsCheckin.objects.filter(zekken_number=zekken, event_code=event_code) + checkins = GpsCheckin.objects.filter(zekken=zekken, event_code=event_code) # クエリ結果の件数を出力 print(f"Found {checkins.count()} checkins") diff --git a/rog/views_apis/api_admin_validation.py b/rog/views_apis/api_admin_validation.py index e1aecc4..f84fc57 100644 --- a/rog/views_apis/api_admin_validation.py +++ b/rog/views_apis/api_admin_validation.py @@ -57,7 +57,7 @@ def get_event_participants_ranking(request): for entry in entries: # このエントリーのチェックイン記録を取得 checkins = GpsCheckin.objects.filter( - zekken_number=str(entry.zekken_number), + zekken=str(entry.zekken_number), event_code=event_code ) @@ -211,7 +211,7 @@ def get_participant_validation_details(request): # チェックイン記録の取得 checkins = GpsCheckin.objects.filter( - zekken_number=str(zekken_number), + zekken=str(zekken_number), event_code=event_code ).order_by('path_order') diff --git a/rog/views_apis/api_supervisor.py b/rog/views_apis/api_supervisor.py index bcab842..fe84630 100644 --- a/rog/views_apis/api_supervisor.py +++ b/rog/views_apis/api_supervisor.py @@ -20,7 +20,7 @@ logger = logging.getLogger(__name__) def get_events_for_supervisor(request): """ Supervisor用のイベント一覧取得API - 認証なし + 認証なし・CSRF保護なし(urls.pyでcsrf_exemptを適用) """ try: events = NewEvent2.objects.all()