Ошибка переноса данных на юг при использовании функции замораживания на юг
У меня есть южная миграция данных, которая пытается создать новые объекты на основе данных, найденных в других моделях. При попытке создать новый объект для данной модели "назначения" я продолжаю получать:
Cannot assign "<ContentType: ContentType object>": "Publishing.content_type" must be a "ContentType" 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 ответ
Это связано с тем, что Юг обрабатывает модели. Вы должны заморозить любую модель, с которой вам нужно работать в процессе миграции. Модели в приложении, где находится миграция, автоматически замораживаются; все остальное вы должны заморозить вручную:
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
не сработает