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"
|
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
# Entryテーブルに新しいフィールドを条件付きで追加
|
||||||
model_name='entry',
|
migrations.RunSQL(
|
||||||
name='can_access_private_events',
|
sql="""
|
||||||
field=models.BooleanField(default=False, help_text='非公開イベント参加権限'),
|
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(
|
# GPSCheckinテーブルに新しいフィールドを条件付きで追加
|
||||||
model_name='entry',
|
migrations.RunSQL(
|
||||||
name='staff_privileges',
|
sql="""
|
||||||
field=models.BooleanField(default=False, help_text='スタッフ権限フラグ'),
|
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(
|
# NewEvent2テーブルに新しいフィールドを条件付きで追加
|
||||||
model_name='entry',
|
migrations.RunSQL(
|
||||||
name='team_validation_status',
|
sql="""
|
||||||
field=models.CharField(choices=[('approved', 'Approved'), ('pending', 'Pending'), ('rejected', 'Rejected')], default='approved', help_text='チーム承認状況', max_length=20),
|
DO $$
|
||||||
),
|
BEGIN
|
||||||
migrations.AddField(
|
-- status フィールドの追加
|
||||||
model_name='entry',
|
IF NOT EXISTS (SELECT FROM information_schema.columns WHERE table_name = 'rog_newevent2' AND column_name = 'status') THEN
|
||||||
name='zekken_label',
|
ALTER TABLE rog_newevent2 ADD COLUMN status VARCHAR(20) DEFAULT 'draft';
|
||||||
field=models.CharField(blank=True, max_length=255, null=True),
|
COMMENT ON COLUMN rog_newevent2.status IS 'イベントステータス';
|
||||||
),
|
END IF;
|
||||||
migrations.AddField(
|
END $$;
|
||||||
model_name='gpscheckin',
|
""",
|
||||||
name='create_at',
|
reverse_sql="-- No reverse SQL needed for conditional operation"
|
||||||
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),
|
|
||||||
),
|
),
|
||||||
migrations.AlterModelTable(
|
migrations.AlterModelTable(
|
||||||
name='gpslog',
|
name='gpslog',
|
||||||
|
|||||||
Reference in New Issue
Block a user