Fix migration error
This commit is contained in:
146
fix_fc_gifu_zekken_numbers.py
Normal file
146
fix_fc_gifu_zekken_numbers.py
Normal file
@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
|
||||
# プロジェクト設定
|
||||
sys.path.append('/app')
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
|
||||
django.setup()
|
||||
|
||||
from django.db import connection, transaction
|
||||
import logging
|
||||
|
||||
# ログ設定
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def assign_zekken_numbers_to_fc_gifu():
|
||||
"""FC岐阜イベント(ID:10)のチームにゼッケン番号を割り当て"""
|
||||
|
||||
print("=== FC岐阜イベントチームゼッケン番号割り当て ===")
|
||||
|
||||
with connection.cursor() as cursor:
|
||||
# 1. FC岐阜イベントの現状確認
|
||||
print("\n1. FC岐阜イベント(ID:10)現状確認:")
|
||||
cursor.execute("""
|
||||
SELECT t.id, t.team_name, t.zekken_number, t.event_id
|
||||
FROM rog_team t
|
||||
JOIN rog_entry e ON t.id = e.team_id
|
||||
WHERE e.event_id = 10
|
||||
ORDER BY t.id;
|
||||
""")
|
||||
fc_teams = cursor.fetchall()
|
||||
|
||||
print(f" FC岐阜関連チーム数: {len(fc_teams)}")
|
||||
print(" 現在の状況:")
|
||||
for team in fc_teams[:5]: # 最初の5件のみ表示
|
||||
print(f" Team ID:{team[0]}, Name:{team[1]}, Zekken:{team[2]}, Event:{team[3]}")
|
||||
|
||||
# 2. ゼッケン番号が未設定のチームを特定
|
||||
teams_without_zekken = [team for team in fc_teams if not team[2]]
|
||||
print(f"\n ゼッケン番号未設定チーム数: {len(teams_without_zekken)}")
|
||||
|
||||
if not teams_without_zekken:
|
||||
print(" 🎉 すべてのチームにゼッケン番号が設定済み")
|
||||
return
|
||||
|
||||
# 3. 既存のゼッケン番号を確認(競合回避)
|
||||
print("\n2. 既存ゼッケン番号確認:")
|
||||
cursor.execute("""
|
||||
SELECT zekken_number
|
||||
FROM rog_team
|
||||
WHERE zekken_number IS NOT NULL AND zekken_number != ''
|
||||
ORDER BY zekken_number;
|
||||
""")
|
||||
existing_zekkens = [row[0] for row in cursor.fetchall()]
|
||||
print(f" 既存ゼッケン番号: {existing_zekkens}")
|
||||
|
||||
# 4. ユーザー確認
|
||||
print(f"\n3. ゼッケン番号割り当て準備:")
|
||||
print(f" 対象チーム数: {len(teams_without_zekken)}")
|
||||
print(f" 割り当て予定ゼッケン番号: FC001-FC{len(teams_without_zekken):03d}")
|
||||
|
||||
confirm = input("\n ゼッケン番号を割り当てますか? (y/N): ")
|
||||
if confirm.lower() != 'y':
|
||||
print(" 処理をキャンセルしました")
|
||||
return
|
||||
|
||||
# 5. ゼッケン番号割り当て実行
|
||||
print("\n4. ゼッケン番号割り当て実行:")
|
||||
with transaction.atomic():
|
||||
for i, team in enumerate(teams_without_zekken, 1):
|
||||
team_id = team[0]
|
||||
team_name = team[1]
|
||||
zekken_number = f"FC{i:03d}"
|
||||
|
||||
cursor.execute("""
|
||||
UPDATE rog_team
|
||||
SET zekken_number = %s, updated_at = NOW()
|
||||
WHERE id = %s;
|
||||
""", [zekken_number, team_id])
|
||||
|
||||
print(f" Team ID:{team_id} ({team_name}) → ゼッケン番号: {zekken_number}")
|
||||
|
||||
print(f"\n ✅ {len(teams_without_zekken)}チームにゼッケン番号を割り当てました")
|
||||
|
||||
# 6. 結果確認
|
||||
print("\n5. 割り当て結果確認:")
|
||||
cursor.execute("""
|
||||
SELECT t.id, t.team_name, t.zekken_number
|
||||
FROM rog_team t
|
||||
JOIN rog_entry e ON t.id = e.team_id
|
||||
WHERE e.event_id = 10 AND t.zekken_number IS NOT NULL
|
||||
ORDER BY t.zekken_number;
|
||||
""")
|
||||
updated_teams = cursor.fetchall()
|
||||
|
||||
print(f" ゼッケン番号付きチーム数: {len(updated_teams)}")
|
||||
print(" 割り当て結果(サンプル):")
|
||||
for team in updated_teams[:10]:
|
||||
print(f" {team[2]}: {team[1]} (ID:{team[0]})")
|
||||
|
||||
# 7. 通過審査管理画面での影響確認
|
||||
print("\n6. 通過審査管理画面への影響:")
|
||||
print(" これで通過審査管理画面で以下が表示されるはずです:")
|
||||
print(" - ALL(全参加者)")
|
||||
for team in updated_teams[:5]:
|
||||
print(f" - {team[2]}({team[1]})")
|
||||
print(" - ...")
|
||||
|
||||
def reset_zekken_numbers():
|
||||
"""FC岐阜イベントのゼッケン番号をリセット(テスト用)"""
|
||||
print("\n=== ゼッケン番号リセット(テスト用) ===")
|
||||
|
||||
with connection.cursor() as cursor:
|
||||
confirm = input("FC岐阜イベントのゼッケン番号をリセットしますか? (y/N): ")
|
||||
if confirm.lower() != 'y':
|
||||
print("リセットをキャンセルしました")
|
||||
return
|
||||
|
||||
with transaction.atomic():
|
||||
cursor.execute("""
|
||||
UPDATE rog_team
|
||||
SET zekken_number = NULL, updated_at = NOW()
|
||||
WHERE id IN (
|
||||
SELECT DISTINCT t.id
|
||||
FROM rog_team t
|
||||
JOIN rog_entry e ON t.id = e.team_id
|
||||
WHERE e.event_id = 10
|
||||
);
|
||||
""")
|
||||
|
||||
affected_rows = cursor.rowcount
|
||||
print(f"✅ {affected_rows}チームのゼッケン番号をリセットしました")
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
import sys
|
||||
if len(sys.argv) > 1 and sys.argv[1] == '--reset':
|
||||
reset_zekken_numbers()
|
||||
else:
|
||||
assign_zekken_numbers_to_fc_gifu()
|
||||
except Exception as e:
|
||||
print(f"❌ エラーが発生しました: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user