Форум сайта python.su
Нужно добавить поле в модели и автоматически его заполнять. Для автоматического заполнения переопределил метод save, в нем вызываю метод, который генерирует значение для этого поля (например generate_my_field). Не получается автоматически заполнить его при миграции: в комментариях в файле, который генерирует south написано следующее
# Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
for obj in orm.ModelName.objects.all(): obj.my_field = obj.generate_my_field() obj.save()
AttributeError: 'ModelName' object has no attribute 'generate_my_field'
Отредактировано svas (Март 12, 2013 08:49:29)
Офлайн
Правильнее делать:
1) Мигрировать схему - schemamigration
2) Мигрировать данные - datamigration
А не объединять это все в schemamigration. Конструкция вида
orm.ModelName.objects.all()
orm['appname.ModelName']
Отредактировано alafin (Март 12, 2013 10:34:49)
Офлайн
alafinЯ так и делал.
Правильнее делать:
1) Мигрировать схему - schemamigration
2) Мигрировать данные - datamigration
Отредактировано svas (Март 13, 2013 19:29:53)
Офлайн
svas, это политика South, не давать возможности пользоваться методами моделей, связано это с тем что методы моделей могу эволюционировать т.е. удаляться/изменяться методы моделей, а миграции не должны от этого зависеть поэтому South предлагает копировать логику моделей в саму миграцию тем самым вы себя обезопасите от эволюционирования моделей т.е. сможете в любой момент как откатить изменения так и накатить их обратно.
Более подробно http://south.readthedocs.org/en/latest/ormfreezing.html#rationale-behind-the-serialisation
Офлайн
Ясно, спасибо
Офлайн