В Django / South HOWTO создать экземпляр модели из другого приложения во время миграции данных

Мне нужно выполнить миграцию данных модели Ответ в приложении Вопрос . В этом скрипте есть зависимость, так что мне нужно создать экземпляр модели 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']?)

. Итак, где я ошибаюсь? Любые указатели приветствуются. Спасибо.

ОБНОВЛЕНИЕ

Итак, поскольку мой предыдущий подход терпел неудачу, я попробовал новый подход. Модель, экземпляр которой не удался в моем коде выше , то есть Глава в приложении Journal , я решил вместо этого создать миграцию данных. Я также позаботился о - заморозке моделей, на которые я ссылаюсь в определении вперед . Я думаю, теперь все должно было быть прямо. У меня есть следующий код пересылки -

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()

Я бы подумал, что теперь, поскольку я создаю экземпляр модели ( Глава ), которая существует в тематическом приложении ( Журнал ), все должно было получиться. Но я получаю ту же ошибку.

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, созданных схемой миграции Юга.

7
задан Michael Dunn 28 March 2014 в 11:15
поделиться