В Django, как индексировать поле в исходной модели прокси-модели?

#django

#django

Вопрос:

У меня есть модель, которая является прокси-моделью, основанной на модели комментариев Comment Django:

 from django_comments.models import Comment

class Annotation(Comment):

    # ...

    class Meta:
        proxy = True
  

У Comment модели есть TextField() called comment , и я хотел бы добавить к этому GinIndex, чтобы ускорить полнотекстовый поиск с использованием Postgresql.

Однако я не могу добавить индекс для этого поля в Annotation классе Meta , потому что я получаю эту ошибку:

примечания.Аннотация: (models.E016) ‘indexes’ ссылается на поле ‘comment’, которое не является локальным для ‘Annotation’ модели.
ПОДСКАЗКА: Эта проблема может быть вызвана наследованием нескольких таблиц.

И я не могу добавить индекс к самому определению поля, потому что это в django_comments Comment модели.

Я предполагаю, что мог бы написать миграцию, чтобы вручную добавить индекс к django_comments.models.Comment comment полю с помощью SQL, но мне интересно, есть ли какой-нибудь менее запутанный способ, которого мне не хватает?

Ответ №1:

Прокси-модели предназначены только для изменения поведения моделей на Python, вы не можете изменить поведение на уровне базы данных (добавление полей, изменение индексов и т.д.).

Я бы не советовал писать миграцию для внешнего приложения в вашем проекте, что может привести к беспорядку из-за зависимостей / заказов миграции.

Я просмотрел документацию комментариев Django и думаю, что это позволяет вам настраивать модель.Вы можете добавить индекс или изменить все, что хотите, расширив абстрактную модель в своем пользовательском приложении для комментариев.

Комментарии:

1. Спасибо… Я опасаюсь этого делать, поскольку это существующее приложение с десятками тысяч комментариев. Хм. Мне нужно подумать о том, что лучше всего сделать.