Найти - Пользователи
Полная версия: South, аттрибуты и методы модели, AttributeError
Начало » Django » South, аттрибуты и методы модели, AttributeError
1
svas
Нужно добавить поле в модели и автоматически его заполнять. Для автоматического заполнения переопределил метод save, в нем вызываю метод, который генерирует значение для этого поля (например generate_my_field). Не получается автоматически заполнить его при миграции: в комментариях в файле, который генерирует south написано следующее
# Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..."
но при попытке вызвать метод у объекта получаю AttributeError.
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'
Что за класс лежит в orm и где определенные мной аттрибуты и методы?
alafin
Правильнее делать:
1) Мигрировать схему - schemamigration
2) Мигрировать данные - datamigration

А не объединять это все в schemamigration. Конструкция вида
orm.ModelName.objects.all()
обычно пишутся в DataMigration, а если бы это было schemigration то надо было бы писать как-то так
orm['appname.ModelName']

Покажите описание класса ModelName и класс с миграцией, а то так сразу трудно сказать в чем проблема.
svas
alafin
Правильнее делать:
1) Мигрировать схему - schemamigration
2) Мигрировать данные - datamigration
Я так и делал.
alafin
svas, это политика South, не давать возможности пользоваться методами моделей, связано это с тем что методы моделей могу эволюционировать т.е. удаляться/изменяться методы моделей, а миграции не должны от этого зависеть поэтому South предлагает копировать логику моделей в саму миграцию тем самым вы себя обезопасите от эволюционирования моделей т.е. сможете в любой момент как откатить изменения так и накатить их обратно.

Более подробно http://south.readthedocs.org/en/latest/ormfreezing.html#rationale-behind-the-serialisation
svas
Ясно, спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB