Fix migration 0011: Use conditional SQL for all fields removal to avoid KeyError
This commit is contained in:
@ -93,55 +93,88 @@ class Migration(migrations.Migration):
|
||||
""",
|
||||
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='entry',
|
||||
name='can_access_private_events',
|
||||
field=models.BooleanField(default=False, help_text='非公開イベント参加権限'),
|
||||
# Entryテーブルに新しいフィールドを条件付きで追加
|
||||
migrations.RunSQL(
|
||||
sql="""
|
||||
DO $$
|
||||
BEGIN
|
||||
-- can_access_private_events フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_entry' AND column_name = 'can_access_private_events') THEN
|
||||
ALTER TABLE rog_entry ADD COLUMN can_access_private_events BOOLEAN DEFAULT FALSE;
|
||||
COMMENT ON COLUMN rog_entry.can_access_private_events IS '非公開イベント参加権限';
|
||||
END IF;
|
||||
|
||||
-- staff_privileges フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_entry' AND column_name = 'staff_privileges') THEN
|
||||
ALTER TABLE rog_entry ADD COLUMN staff_privileges BOOLEAN DEFAULT FALSE;
|
||||
COMMENT ON COLUMN rog_entry.staff_privileges IS 'スタッフ権限フラグ';
|
||||
END IF;
|
||||
|
||||
-- team_validation_status フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_entry' AND column_name = 'team_validation_status') THEN
|
||||
ALTER TABLE rog_entry ADD COLUMN team_validation_status VARCHAR(20) DEFAULT 'approved';
|
||||
COMMENT ON COLUMN rog_entry.team_validation_status IS 'チーム承認状況';
|
||||
END IF;
|
||||
|
||||
-- zekken_label フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_entry' AND column_name = 'zekken_label') THEN
|
||||
ALTER TABLE rog_entry ADD COLUMN zekken_label VARCHAR(255);
|
||||
END IF;
|
||||
END $$;
|
||||
""",
|
||||
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='entry',
|
||||
name='staff_privileges',
|
||||
field=models.BooleanField(default=False, help_text='スタッフ権限フラグ'),
|
||||
# GPSCheckinテーブルに新しいフィールドを条件付きで追加
|
||||
migrations.RunSQL(
|
||||
sql="""
|
||||
DO $$
|
||||
BEGIN
|
||||
-- create_at フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_gpscheckin' AND column_name = 'create_at') THEN
|
||||
ALTER TABLE rog_gpscheckin ADD COLUMN create_at TIMESTAMP WITH TIME ZONE;
|
||||
COMMENT ON COLUMN rog_gpscheckin.create_at IS '作成日時:データの作成日時';
|
||||
END IF;
|
||||
|
||||
-- create_user フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_gpscheckin' AND column_name = 'create_user') THEN
|
||||
ALTER TABLE rog_gpscheckin ADD COLUMN create_user TEXT;
|
||||
COMMENT ON COLUMN rog_gpscheckin.create_user IS '作成ユーザー';
|
||||
END IF;
|
||||
|
||||
-- event_id フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_gpscheckin' AND column_name = 'event_id') THEN
|
||||
ALTER TABLE rog_gpscheckin ADD COLUMN event_id INTEGER;
|
||||
COMMENT ON COLUMN rog_gpscheckin.event_id IS 'イベントID';
|
||||
END IF;
|
||||
|
||||
-- goal_time フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_gpscheckin' AND column_name = 'goal_time') THEN
|
||||
ALTER TABLE rog_gpscheckin ADD COLUMN goal_time TEXT;
|
||||
COMMENT ON COLUMN rog_gpscheckin.goal_time IS 'ゴール時刻=ゴール時のみ使用される。画像から時刻を読み取り設定する。';
|
||||
END IF;
|
||||
|
||||
-- image_address フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_gpscheckin' AND column_name = 'image_address') THEN
|
||||
ALTER TABLE rog_gpscheckin ADD COLUMN image_address TEXT;
|
||||
COMMENT ON COLUMN rog_gpscheckin.image_address IS 'チェックイン画像のパス';
|
||||
END IF;
|
||||
END $$;
|
||||
""",
|
||||
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='entry',
|
||||
name='team_validation_status',
|
||||
field=models.CharField(choices=[('approved', 'Approved'), ('pending', 'Pending'), ('rejected', 'Rejected')], default='approved', help_text='チーム承認状況', max_length=20),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='entry',
|
||||
name='zekken_label',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gpscheckin',
|
||||
name='create_at',
|
||||
field=models.DateTimeField(blank=True, help_text='作成日時:データの作成日時', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gpscheckin',
|
||||
name='create_user',
|
||||
field=models.TextField(blank=True, help_text='作成ユーザー', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gpscheckin',
|
||||
name='event_id',
|
||||
field=models.IntegerField(blank=True, help_text='イベントID', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gpscheckin',
|
||||
name='goal_time',
|
||||
field=models.TextField(blank=True, help_text='ゴール時刻=ゴール時のみ使用される。画像から時刻を読み取り設定する。', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gpscheckin',
|
||||
name='image_address',
|
||||
field=models.TextField(blank=True, help_text='チェックイン画像のパス', null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='newevent2',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('public', 'Public'), ('private', 'Private'), ('draft', 'Draft'), ('closed', 'Closed')], default='draft', help_text='イベントステータス', max_length=20),
|
||||
# NewEvent2テーブルに新しいフィールドを条件付きで追加
|
||||
migrations.RunSQL(
|
||||
sql="""
|
||||
DO $$
|
||||
BEGIN
|
||||
-- status フィールドの追加
|
||||
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_newevent2' AND column_name = 'status') THEN
|
||||
ALTER TABLE rog_newevent2 ADD COLUMN status VARCHAR(20) DEFAULT 'draft';
|
||||
COMMENT ON COLUMN rog_newevent2.status IS 'イベントステータス';
|
||||
END IF;
|
||||
END $$;
|
||||
""",
|
||||
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||
),
|
||||
migrations.AlterModelTable(
|
||||
name='gpslog',
|
||||
|
||||
Reference in New Issue
Block a user