# チームCSVインポート機能 操作マニュアル ## 概要 このマニュアルは、CSVファイルからチーム登録データを一括インポートする機能の使用方法を説明します。 ## 機能概要 - CSVファイルからチーム情報を一括読み込み - ユーザー、チーム、メンバー、エントリーの自動作成 - リーダー(氏名1)の自動設定 - イベント参加登録の自動処理 - カテゴリー自動選択(NewCategoryデータベース参照) - インポート結果のCSV出力 ## 前提条件 ### 1. Docker環境 ```bash # Dockerコンテナが起動していることを確認 docker compose ps # 起動していない場合 docker compose up -d ``` ### 2. イベント作成 インポート前に対象イベントがデータベースに存在している必要があります。 ```bash # イベント存在確認 docker compose exec app python manage.py shell -c " from rog.models import NewEvent2 events = NewEvent2.objects.all() for event in events: print(f'イベントコード: {event.event_code}, 名前: {event.event_name}') " ``` ## CSVファイル形式 ### 必須列 | 列名 | 説明 | 例 | |------|------|-----| | 部門別数 | 部門番号 | 1 | | 時間 | 競技時間 | 3, 5 | | 部門 | 部門名 | 一般, ファミリー | | チーム名 | チーム名 | いなりずし | | メール | 代表者メールアドレス | test@example.com | | パスワード | ログインパスワード | password123 | | 電話番号 | 代表者電話番号 | 090-1234-5678 | | 氏名1 | 代表者氏名(リーダー) | 山田太郎 | | 誕生日1 | 代表者誕生日 | 1990/4/15 | ### オプション列 | 列名 | 説明 | |------|------| | 氏名2〜氏名7 | 追加メンバー氏名 | | 誕生日2〜誕生日7 | 追加メンバー誕生日 | ### CSVファイル例 ```csv 部門別数,時間,部門,チーム名,メール,パスワード,電話番号,氏名1,誕生日1,氏名2,誕生日2,氏名3,誕生日3 1,3,一般,いなりずし,test@example.com,pass123,090-1234-5678,山田太郎,1990/4/15,山田花子,1992/8/20,田中次郎,1988/12/3 ``` ## 操作手順 ### 1. ドライラン実行(推奨) 実際のデータ変更前に、処理内容を確認します。 ```bash docker compose exec app python manage.py import_teams \ --event_code="岐阜ロゲイニング2025" \ --csv_file="CPLIST/input/teams2025.csv" \ --dry_run ``` **出力例:** ``` [DRY RUN] 行 2: チーム=いなりずし ユーザー既存: test@example.com パスワード:既存 エントリー: ゼッケン1, カテゴリー:一般, 時間:3時間 参加登録: 新規作成予定 メンバー: 3名 [山田太郎(1990/4/15), 山田花子(1992/8/20), 田中次郎(1988/12/3)] ``` ### 2. 本実行 ドライランで問題がないことを確認後、実際のインポートを実行します。 ```bash docker compose exec app python manage.py import_teams \ --event_code="岐阜ロゲイニング2025" \ --csv_file="CPLIST/input/teams2025.csv" ``` ## コマンドパラメータ | パラメータ | 必須 | 説明 | 例 | |-----------|------|------|-----| | --event_code | ✓ | 対象イベントコード | "岐阜ロゲイニング2025" | | --csv_file | ✓ | CSVファイルパス | "CPLIST/input/teams2025.csv" | | --dry_run | - | ドライラン実行 | (パラメータのみ) | ## 処理内容詳細 ### 1. ユーザー登録 - **既存ユーザー**: メールアドレスで検索し、既存の場合は再利用 - **新規ユーザー**: メール、パスワード、電話番号で新規作成 ### 2. チーム登録 - **既存チーム**: 同一オーナー・同一チーム名の場合は再利用 - **新規チーム**: チーム名、オーナー、イベント情報で新規作成 ### 3. メンバー登録 - **リーダー設定**: 氏名1の人を自動的にチームオーナー(リーダー)に設定 - **追加メンバー**: 氏名2〜氏名7の人をメンバーとして登録 - **ダミーユーザー**: メンバー用に自動生成されるダミーアカウント ### 4. エントリー登録 - **カテゴリー選択**: NewCategoryデータベースから最適なカテゴリーを自動選択 - **ゼッケン番号**: 自動採番(既存の最大番号+1) - **重複チェック**: 同一チーム・同一イベントの重複登録を防止 ## カテゴリー自動選択ロジック 1. **完全一致**: `部門名-時間時間`(例:一般-3時間) 2. **部分一致**: 部門名と時間が一致し、メンバー数条件を満たすもの 3. **新規作成**: 該当なしの場合は新規カテゴリー作成 **既存カテゴリー例:** - 一般-3時間(最大7名) - 一般-5時間(最大7名) - ファミリー-3時間(最大7名) - ファミリー-5時間(最大7名) - 男子ソロ-3時間(最大1名) - 女子ソロ-5時間(最大1名) ## 出力ファイル ### CSV結果ファイル 実行完了後、以下の形式でCSVファイルが出力されます: **ファイル名:** `import_results_{イベントコード}_{タイムスタンプ}.csv` **場所:** CSVファイルと同じディレクトリ **出力項目:** - チーム名 - ゼッケン番号 - カテゴリー - 時間 - オーナーメール - リーダー(氏名と誕生日) - メンバー数 - メンバー一覧 - 参加登録状況 - エントリーID - 作成日時 ## エラー処理 ### よくあるエラー #### 1. イベントが見つからない ``` エラー: イベントコード '存在しないイベント' が見つかりません ``` **対処法:** 正しいイベントコードを確認してください。 #### 2. CSVファイルが見つからない ``` エラー: CSVファイル 'ファイルパス' が見つかりません ``` **対処法:** ファイルパスを確認してください。 #### 3. カテゴリー制約エラー ``` エラー: このカテゴリーはソロ参加のみ可能です ``` **対処法:** メンバー数とカテゴリーの制約を確認してください。 ### エラー出力例 ``` エラー数: 3 行 2: メールアドレスが必要です 行 5: チーム名が必要です 行 8: このカテゴリーはソロ参加のみ可能です ``` ## データ確認方法 ### インポート結果確認 ```bash # エントリー確認 docker compose exec app python manage.py shell -c " from rog.models import Entry, NewEvent2 event = NewEvent2.objects.get(event_code='岐阜ロゲイニング2025') entries = Entry.objects.filter(event=event) print(f'総エントリー数: {entries.count()}') for entry in entries[:5]: # 最初の5件 print(f'ゼッケン{entry.zekken_number}: {entry.team.team_name} ({entry.category.category_name})') " # チーム・メンバー確認 docker compose exec app python manage.py shell -c " from rog.models import Team, Member teams = Team.objects.filter(event__event_code='岐阜ロゲイニング2025') print(f'総チーム数: {teams.count()}') for team in teams[:3]: # 最初の3チーム members = team.members.all() print(f'チーム: {team.team_name} (リーダー: {team.owner.firstname})') print(f' メンバー数: {members.count()}') for member in members: print(f' - {member.firstname}') " ``` ## 注意事項 1. **バックアップ**: 本実行前に必ずデータベースのバックアップを取得してください 2. **重複実行**: 同じCSVファイルを複数回実行すると重複データが作成される可能性があります 3. **文字エンコーディング**: CSVファイルはUTF-8で保存してください 4. **メールアドレス**: 重複不可のため、既存ユーザーと重複しないよう注意してください 5. **カテゴリー制約**: NewCategoryの設定(メンバー数制限等)に従います ## トラブルシューティング ### Q: インポートが途中で止まる A: エラーメッセージを確認し、該当行のデータを修正してください。 ### Q: ゼッケン番号が重複する A: 既存エントリーを削除してから再実行してください。 ### Q: カテゴリーが正しく選択されない A: NewCategoryデータベースの設定を確認してください。 ### Q: メンバーが登録されない A: CSVの列名が正しいか(氏名1、氏名2等)確認してください。 ## サポート 技術的な問題や質問がある場合は、システム開発チームまでお問い合わせください。 --- **作成日:** 2025年9月5日 **バージョン:** 1.0 **対象システム:** 岐阜ロゲイニングサーバー