Очистка библиотеки от старой миграции Django

#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 объект. Это приведет к сбою с импортером, если библиотека будет полностью удалена из проекта.

Каков самый безопасный способ удалить ссылку на библиотеку из старой миграции:

  1. Отредактируйте старую миграцию и измените PQ ее на Q , так как миграция будет выполняться Django 3, который поддерживает условные индексы
  2. Сжатие миграций до такой степени, что создание индекса появляется только один раз в более новом формате
  3. Есть ли другой путь к удалению этой библиотеки?

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

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