Создание индекса Gin для хранимого генерируемого столбца Postgres в Django

Я хочу настроить Postgres "stored generated columns" с индексацией для полнотекстового поиска по двум полям модели. Я создал генерируемый столбец, воспользовавшись помощью из этого руководства , но при установке gin-индекса на столбец я получаю следующее:

django.core.exceptions.FieldDoesNotExist: Article has no field named 'vector_column'. The app cache isn't ready yet, so if this is an auto-created related field, it won't be available yet.

И моя Article модель:

class Article(models.Model):
    title = models.CharField(...)
    content = models.TextField(...)
    class Meta:
        indexes = [GinIndex(fields=['vector_column'])]

и мой пользовательский sql в файле миграции:

    operations = [
        migrations.RunSQL(
            sql='''
              ALTER TABLE articles_article ADD COLUMN vector_column tsvector GENERATED ALWAYS AS (
                setweight(to_tsvector('english', coalesce(title, '')), 'A') ||
                setweight(to_tsvector('english', coalesce(content,'')), 'B')
              ) STORED;
            ''',

            reverse_sql='''
              ALTER TABLE articles_article DROP COLUMN vector_column;
            '''
        ),
    ]

Возможно ли установить индекс из Django? Кажется, Django требует, чтобы поле было определено в модели, но это не то, как работает сгенерированный столбец. Если нет, то каков правильный способ установки правильного индекса (упомянутого в этой Postgres doc, в конце - on) в файлах миграции?

Как сказал Iain в комментариях, индекс должен обрабатываться в миграциях. Я только что добавил еще одну миграцию к массиву operations:

    operations = [
        migrations.RunSQL(
            sql='''
              ALTER TABLE articles_article ADD COLUMN vector_column tsvector GENERATED ALWAYS AS (
                setweight(to_tsvector('english', coalesce(title, '')), 'A') ||
                setweight(to_tsvector('english', coalesce(content,'')), 'B')
              ) STORED;
            ''',

            reverse_sql='''
              ALTER TABLE articles_article DROP COLUMN vector_column;
            '''
        ),
        migrations.RunSQL(
            sql='''
                CREATE INDEX textsearch_idx ON articles_article USING GIN (vector_column);
            ''',

            reverse_sql='''
                DROP INDEX IF EXISTS textsearch_idx;
            '''
        ),
    ]
Вернуться на верх