Мне нужно выполнить миграцию данных модели Ответ в приложении Вопрос .В этом сценарии есть такая зависимость, что мне нужно создать экземпляр модели Chapter , которая находится в приложении Journal .Итак, я кодировал его следующим образом:
def forwards(self, orm):
for answer_object in orm.Answer.objects.all():
#This Works.
blog, is_created = orm['blog.Post'].objects.get_or_create(title=answer_object.answer[:100])
blog.save()
#This DOES NOT work
chapter, is_created = orm['journal.Chapter'].objects.get_or_create(content_object=blog)
chapter.save()
#cleanup task, not relevant to this question below
answer_object.chapter_ptr = chapter
answer_object.save()
Но, как и ожидалось, это приводит к ошибке "orm ['journal.Chapter']. Objects.get_or_create (content_object = blog)", говоря, что
django.core.exceptions.FieldError: Cannot resolve keyword 'content_object' into field.
Это, вероятно, связано с тем, что content_object является GenericForeignKey, поэтому некоторые операции запрещены.Но я также попробовал другие альтернативы для создания объекта "главы", такие как
chapter = orm['journal.Chapter'](content_object=blog)
ERROR > TypeError: 'content_object' is an invalid keyword argument for this function
и
chapter = orm.journal.Chapter(content_object=blog)
ERROR > AttributeError: The model 'journal' from the app 'questions' is not available in this migration. (Did you use orm.ModelName, not orm['app.ModelName']?)
Так в чем же я ошибаюсь?Любые указатели приветствуются.Спасибо.
ОБНОВЛЕНИЕ
Так как мой предыдущий подход не удался, я попробовал новый метод.Модель, экземпляр которой в моем коде был выше , то есть Chapter в приложении Journal , я решил вместо этого создать миграцию данных.Я также удостоверился в --freeze
моделях, на которые я ссылаюсь в определении forwards
.Теперь это должно было быть прямым, я думаю.У меня есть следующий код для пересылки:
def forwards(self, orm):
for answer_object in orm['questions.Answer'].objects.all():
#Works, AGAIN!
blog, is_created = orm['blog.Post'].objects.get_or_create(title=answer_object.answer[:100])
blog.save()
# DOES NOT WORK, AGAIN!
chapter = orm.Chapter(rank=1, content_object=blog)
chapter.save()
Я бы подумал, что сейчас, так как я создаю экземпляр модели ( Chapter ), которая существует в предметном приложении (Журнал ) все должно было сработать.Но я получаю ту же ошибку.
TypeError: 'content_object' is an invalid keyword argument for this function
Сбой в той же точке, а именно, "content_object".Я опубликую ниже определение модели, если это может помочь.
class Chapter(models.Model):
rank = models.IntegerField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
ОБНОВЛЕНИЕ 2 Хотел добавить, что все модели, которые затрагиваются в этих методах перенаправления, а именно - блог, глава, вопросы;полностью определены в файлах 00n _ *. py, созданных схемами Юга.