Ошибка переноса данных на юг при использовании функции замораживания на юг - PullRequest
4 голосов
/ 02 июня 2011

У меня есть южная миграция данных, которая пытается создать новые объекты на основе данных, найденных в других моделях.При попытке создать новый объект для данной модели 'destination', я продолжаю получать:

Cannot assign "<ContentType: ContentType object>": "Publishing.content_type" must be a "ContentType" instance.

Кажется, что с 'instance' что-то не так, когда осуществляется доступ через ORM South freeze, например:

ContentType = orm['contenttypes.ContentType']
content_type_kwargs = {
    'model': ContentModel._meta.module_name, 
    'app_label': ContentModel._meta.app_label, }
content_type = ContentType.objects.get(**content_type_kwargs)

# further down

publishing_kwargs = {
    'site': Site.objects.get_current(),
    'publishing_type': publishing_type,
    'start': start,
    'content_type': content_type, 
    'object_id': content_object.id, }

publishing = orm.Publishing(**publishing_kwargs) # Produces the error above

Теперь я много раз проверял, что content_type на самом деле является экземпляром ContentType - но каким-то образом django так не считает.

  • Есть лиРазница между «замороженной» версией экземпляра в южной или обычной версии для django?
  • Что еще это может быть?

1 Ответ

8 голосов
/ 02 июня 2011

Это связано с тем, как Юг обрабатывает модели. Вы должны заморозить любую модель, с которой вам нужно работать при переносе. Модели в приложении, где находится миграция, автоматически замораживаются; все остальное вы должны заморозить вручную:

python manage.py schemamigration --auto yourapp --freeze contenttypes

Если вам нужно заморозить несколько приложений, повторите аргумент --freeze столько раз, сколько необходимо:

python manage.py schemamigration --auto yourapp --freeze contenttypes --freeze someotherapp ...

Еще одна вещь. При доступе к этим дополнительным замороженным моделям вы должны использовать южный API старого стиля:

orm['contenttypes.contenttype'].objects.all()

Что-то вроде orm.ContentType не будет работать.

...