Как перенести данные из одной модели в другую, используя South в Django? - PullRequest
4 голосов
/ 07 декабря 2009

Я создал приложение Django, которое имело собственную внутреннюю систему голосования и модель под названием «Голосовать», чтобы отслеживать ее. Я хочу реорганизовать систему голосования в свое собственное приложение, чтобы я мог использовать ее повторно. Однако оригинальное приложение находится в производстве, и мне нужно создать миграцию данных, которая будет принимать все голоса и переносить их в отдельное приложение.

Как я могу получить два приложения для участия в миграции, чтобы у меня был доступ к обеим их моделям? К сожалению, как исходное, так и отдельное приложения имеют модель «Голосовать сейчас», поэтому мне нужно знать о любых конфликтах.

1 Ответ

5 голосов
/ 07 декабря 2009

Вы пробовали db.rename_table ?

Я бы начал с создания миграции в новом или старом приложении, которое выглядит примерно так:

class Migration:

    def forwards(self, orm):
        db.rename_table('old_vote', 'new_vote')    

    def backwards(self, orm):
        db.rename_table('new_vote', 'old_vote')

Если это не работает, вы можете перенести каждый элемент в цикле с чем-то вроде этого:

def forwards(self, orm):
    for old in orm['old.vote'].objects.all():
        # create a new.Vote with old's data
models = {
    'old.vote' = { ... },
    'new.vote' = { ... },
}

Примечание. Вы должны использовать orm[...] для доступа к любым моделям вне приложения, которое в данный момент переносится. В противном случае стандартная запись orm.Vote.objects.all() работает.

...