Требуется ли для изменения метода экземпляра модели в приложении в Django 1.5 миграция через South?
Насколько я понимаю, вы не можете сериализовать случайный код Python... Более того, я понимаю, что миграции действительно предназначены для управления изменениями в схеме таблицы - например, добавление атрибута или поля для записей в таблице... или для управления изменениями к типу самих данных (например, преобразование незашифрованных паролей в хешированные/соленые пароли).
Итак, ЕСЛИ нет никаких изменений, внесенных непосредственно в атрибуты модели, и/или нет изменений в конкретном типе поля или что-то еще, ТО Миграция НЕ нужна, верно?
И вообще можно ли предположить, что изменения методов экземпляра и/или даже статических методов в модели Django НЕ требуют миграции?
(В настоящее время я думаю, что это не так. Дважды проверьте мои мысли здесь через Stackoverlow.)
Что насчет изменений в менеджере моделей? То есть: к методу, который влияет на создание экземпляра объекта?
В частности... что касается первой части моего вопроса об изменении "метода экземпляра"... в этом случае модель подклассифицирует другую пользовательскую модель, и я хочу изменить некоторый код в модели подкласса, например:
class Enrollment(ApiModel): # init method, etc., in here def pretty_semester(self): try: sem = self.enrollment_dict.get('CourseSemester', 'No Semester') if not sem: (...) if results: (...) elif 'MTS' in sem: results = re.findall(compiled_mts_match, sem) if results: base_string = "Other B 20" if len(results[0]) == 2: if results[0][1] == '02': base_string = 'Winter B 20' elif results[0][1] == '04': base_string = 'Spring B 20' elif results[0][1] == '07': base_string = 'Summer B 20' elif results[0][1] == '08': base_string = 'Summer B 20' elif results[0][1] == '10': base_string = 'Fall B 20' return '%s%s' % (base_string, results[0][0]) (...) return sem except: return sem
Если я изменю только один оператор elif в методе «симпатичный семестр» в приведенном выше классе, вот так...
def pretty_semester(self): try: sem = self.enrollment_dict.get('CourseSemester', 'No Semester') if not sem: (...) if results: (...) #super minor alteration of this elif statement... elif 'MTS' in sem: results = re.findall(compiled_mts_match, sem) if results: base_string = "Other B 20" if len(results[0]) == 2: if results[0][1] == '02': base_string = 'Winter B 20' elif results[0][1] == '03': # new line base_string = 'Spring B 20' # new line elif results[0][1] == '04': base_string = 'Spring B 20' elif results[0][1] == '07': base_string = 'Summer B 20' elif results[0][1] == '08': base_string = 'Summer B 20' elif results[0][1] == '10': base_string = 'Fall B 20' return '%s%s' % (base_string, results[0][0]) (...) return sem except: return sem
... тогда это даже потребует миграции?
(НЕТ... не будет, верно?)
(Теперь, если бы я настраивал собственный менеджер моделей... тогда??)
По сути, в дополнение к пониманию приведенного выше примера, я ищу некоторые четкие и простые эмпирические правила для - при взломе модели - требуется миграция... если какие-либо такие советы можно обобщить. Я также знаю, что в Django 1.7 произошли значительные изменения в том, как обрабатываются миграции, но в данном случае я использую версию 1.5.