У меня есть такая миграция:
class Migration(migrations.Migration):
dependencies = [
('app', '0020_auto_20191023_2245'),
]
operations = [
migrations.AddField(
model_name='agenda',
name='theme',
field=models.PositiveIntegerField(default=1),
),
]
Но возникает ошибка:
django.db.utils.ProgrammingError: column "theme" of relation "app_agenda" already exists
Не проблема, я обернул эту ошибку следующим образом:
from django.db import migrations, models, ProgrammingError
def add_field_theme_to_agenda(apps, schema_editor):
try:
migrations.AddField(
model_name='agenda',
name='theme',
field=models.PositiveIntegerField(default=1),
),
except ProgrammingError as e: # sometimes it can exist
if "already exists" not in str(e):
raise
class Migration(migrations.Migration):
dependencies = [
('app', '0020_auto_20191023_2245'),
]
operations = [
migrations.RunPython(add_field_theme_to_agenda),
]
Это работает как талисман, и все следующие миграции выполняются.
Моя проблема в том, что каждый раз, когда я запускаю "makemigrations
", Django добавляет снова миграцию(= тот, что вверху моего вопроса). Я предполагаю, что это потому, что он не видит его в миграциях, потому что мой код запутывает его.
Как обойти это с помощью миграций (не говорите ответы типа «эта проблема в вашей базе данных, исправьте вашу базу данных»)