Что Django 1.7+ эквивалентно add_ignored_fields() в South?

В предыдущих версиях Django мы все использовали South для выполнения миграций, и, поскольку он был не таким умным, как нам хотелось бы, нам иногда приходилось указывать ему, чтобы он явно игнорировал некоторые поля, потому что такие поля были слишком сложными для обработки. . Мы сделали это с add_ignored_fields, и все в значительной степени сработало.

В нашем случае у нас есть «поле» в нашей модели, которое является подклассом CharField, которое фактически прикрепляет два дополнительных поля к модели с помощью метода contribute_to_class. Это довольно странный процесс, но он имеет смысл для нашего варианта использования и работал нормально, пока мы не обновились до Django 1.7.

Однако с новой системой миграции наше использование add_ignored_fields() больше не работает, и наши модульные тесты взрываются, поскольку он пытается создать тестовую таблицу базы данных с этими полями. В частности, говорится:

django.db.utils.OperationalError: duplicate column name: our_column_name

В данном случае our_column_name является одним из полей, создаваемых этим специальным подклассом CharField.

В идеальном мире код миграции мог бы правильно обрабатывать эти поля, но я бы согласился на версию 1.7 add_ignored_fields(), если она существует.

Я также должен отметить, что мы нашли объяснение для deconstruct в документации Django, но боюсь, что это не имеет для меня никакого смысла. Не могу понять, относится ли это к данной ситуации или нет.


person Daniel Quinn    schedule 22.12.2014    source источник


Ответы (1)


Мы обнаружили этот билет Django, в котором в значительной степени говорится, что это шаблон проектирования, не поддерживает, поэтому нам просто придется переписать модель, чтобы явно создать другие поля в модели, а затем ссылаться на указанные поля из «родительского» поля а-ля ImageField.

person Daniel Quinn    schedule 23.12.2014