8.6 KiB
8.6 KiB
チームCSVインポート機能 操作マニュアル
概要
このマニュアルは、CSVファイルからチーム登録データを一括インポートする機能の使用方法を説明します。
機能概要
- CSVファイルからチーム情報を一括読み込み
- ユーザー、チーム、メンバー、エントリーの自動作成
- リーダー(氏名1)の自動設定
- イベント参加登録の自動処理
- カテゴリー自動選択(NewCategoryデータベース参照)
- インポート結果のCSV出力
前提条件
1. Docker環境
# Dockerコンテナが起動していることを確認
docker compose ps
# 起動していない場合
docker compose up -d
2. イベント作成
インポート前に対象イベントがデータベースに存在している必要があります。
# イベント存在確認
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ファイル例
部門別数,時間,部門,チーム名,メール,パスワード,電話番号,氏名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. ドライラン実行(推奨)
実際のデータ変更前に、処理内容を確認します。
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. 本実行
ドライランで問題がないことを確認後、実際のインポートを実行します。
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)
- 重複チェック: 同一チーム・同一イベントの重複登録を防止
カテゴリー自動選択ロジック
- 完全一致:
部門名-時間時間(例:一般-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: このカテゴリーはソロ参加のみ可能です
データ確認方法
インポート結果確認
# エントリー確認
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}')
"
注意事項
- バックアップ: 本実行前に必ずデータベースのバックアップを取得してください
- 重複実行: 同じCSVファイルを複数回実行すると重複データが作成される可能性があります
- 文字エンコーディング: CSVファイルはUTF-8で保存してください
- メールアドレス: 重複不可のため、既存ユーザーと重複しないよう注意してください
- カテゴリー制約: NewCategoryの設定(メンバー数制限等)に従います
トラブルシューティング
Q: インポートが途中で止まる
A: エラーメッセージを確認し、該当行のデータを修正してください。
Q: ゼッケン番号が重複する
A: 既存エントリーを削除してから再実行してください。
Q: カテゴリーが正しく選択されない
A: NewCategoryデータベースの設定を確認してください。
Q: メンバーが登録されない
A: CSVの列名が正しいか(氏名1、氏名2等)確認してください。
サポート
技術的な問題や質問がある場合は、システム開発チームまでお問い合わせください。
作成日: 2025年9月5日
バージョン: 1.0
対象システム: 岐阜ロゲイニングサーバー