Django & South :Методы настраиваемого поля не выполняются при выполнении obj.save ()при переносе данных

В моей модели Django у меня есть два поля:name(обычныйCharFieldslug, настраиваемое поле, которое генерирует слаг на основе имени поля, переданного в определении поля, в этом случае я использую для этого name.

Во-первых, в модели было только поле nameс соответствующими миграциями и всем остальным. Затем мне нужно было добавить поле slug, поэтому, следуя соглашениям South, я добавил поле slug с unique=False, создал миграцию схемы, затем создал миграцию данных, установил unique=Trueи создал другую миграцию для этого последнего изменения..

Поскольку значение slug генерируется при сохранении модели, в методе миграции данных forwardsя перебирал набор запросов, возвращаемый orm['myapp.MyModel'].objects.all(), и вызывал метод save()для каждого экземпляра.

Но значение поля slug никогда не генерируется. В сеансе IPython я сделал то же самое, но сослался на модель как from myapp.models import MyModelи сработал. Используя некоторые операторы отладки, печать typeмодели, возвращенной South orm dict, показывает реальный класс, это не похоже на поддельную модель, созданную South на лету.

Поле slug создает свое значение при использовании метода pre_save. Как заставить его вызываться во время переноса данных? Мне нужно обеспечить уникальность значения, поэтому, когда индекс применяется в более поздней миграции схемы, столбцы не содержат повторяющихся значений.

Спасибо!

Кстати, :Класс поля slug действительно определяет south_field_triple, поэтому Юг хорошо с ним справляется.

РЕДАКТИРОВАТЬ:См. мой ответ . Но больше похоже на ответ, это больше похоже на взлом. Есть ли лучший/правильный способ сделать это?

6
задан Community 23 May 2017 в 10:27
поделиться