В предыдущих версиях 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, но боюсь, что это не имеет для меня никакого смысла. Не могу понять, относится ли это к данной ситуации или нет.