#python #django
Вопрос:
У меня есть миграция Django, в которой использовалась библиотека частичного индекса. Это довольно старая миграция в давно работающем проекте, созданная до того, как Django поддерживал частичные индексы, и теперь мне нужно обновить проект с Django 2.2 до Django 3.2.
Библиотека частичных индексов больше не нужна, так как Django теперь поддерживает частичные индексы.
Более того, в этой библиотеке есть код, который, похоже, не работает с Django 3, поскольку структуры моделей изменились (в частности, это связано с исключением FieldDoesNotExist).
Я пытаюсь обновить старый частичный индекс до нового формата Django, используя систему условий, описанную здесь https://docs.djangoproject.com/en/2.2/ref/models/indexes/#condition
Само изменение простое, оно включает в себя изменение определения индекса в модели с
indexes = [Index(fields=['round'], name='round_index', condition=PQ(removed_at__isnull=True))]
Для
indexes = [Index(fields=['round'], name='round_index', condition=Q(removed_at__isnull=True))]
(обратите внимание на изменение PQ
, которое происходит от частичного индекса, к Q
которому относится собственная конструкция Django)
Это приводит к миграции, которая отбрасывает и воссоздает индекс, где все выглядит нормально.
Однако более ранняя миграция, при которой этот индекс был первоначально создан, импортировала библиотеку частичного индекса для ссылки на PQ
объект. Это приведет к сбою с импортером, если библиотека будет полностью удалена из проекта.
Каков самый безопасный способ удалить ссылку на библиотеку из старой миграции:
- Отредактируйте старую миграцию и измените
PQ
ее наQ
, так как миграция будет выполняться Django 3, который поддерживает условные индексы - Сжатие миграций до такой степени, что создание индекса появляется только один раз в более новом формате
- Есть ли другой путь к удалению этой библиотеки?
Комментарии:
1. Сжатие ваших миграций до такой степени, что на старую библиотеку больше не ссылаются, кажется разумным подходом