Вопрос касается пользовательского файла миграции.
from django.db import migrations
from django.contrib.contenttypes.models import ContentType
class Migration(migrations.Migration):
dependencies = [
('api', '0007_auto_20191013_1553'),
]
try:
con = ContentType.objects.get_by_natural_key(app_label='api', model='product')
model = ContentType.model_class(con)
db_table = model._meta.db_table
operations = [
migrations.RunSQL(
"""
DROP TRIGGER IF EXISTS text_searchable_update ON %(db_table)s;
""",
{'db_table': db_table}
),
migrations.RunSQL(
"""
CREATE TRIGGER text_searchable_update BEFORE INSERT OR UPDATE
ON %(db_table)s FOR EACH ROW EXECUTE FUNCTION
tsvector_update_trigger(textsearchable_index_col, 'pg_catalog.english', description)
""",
{'db_table': db_table}
)
]
except ContentType.DoesNotExist:
operations = []
Цель этой миграции - создать триггер в столбце БД textsearchable_index_col
для обновления сохраненного вектора в случае, если столбец description
создан или обновлен.
Проблема в том, что я хочу убедиться, что триггер создан на правильной таблице в случае изменения db_table
имени. Так что я получаю db_table = model._meta.db_table
и хочу вставить значение db_table
в необработанный оператор SQL, но, похоже, я не знаю, как это сделать. В примере в Django docs они используют % s formattig, но это вызывает SQL syntax error
во время процесса миграции. Вопрос в том, как вставить db_table
или любые сторонние данные в широком смысле внутри этой команды SQL. Спасибо