4

나는 내부 투표 시스템과 그것을 추적하기 위해 투표라는 모델이있는 장고 앱을 만들었습니다. 투표 시스템을 자체 앱으로 리팩토링하여 재사용 할 수 있기를 바랍니다. 그러나 원래 앱이 제작 중이며 모든 투표를 가져 와서 별도의 앱으로 이식하는 데이터 이전을 만들어야합니다.Django에서 South를 사용하여 한 모델에서 다른 모델로 데이터를 마이그레이션하려면 어떻게해야합니까?

두 모델에 모두 액세스 할 수 있도록 두 개의 앱을 이전에 참여하게하려면 어떻게해야합니까? 불행히도 원래의 앱과 별도의 앱에는 모두 Vote라는 모델이 있으므로 충돌이 있는지 확인해야합니다.

답변

5

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() 표기법이 적용됩니다.

+0

그것은 날카로운 측면 생각입니다! ForeignKey를 GenericForeignKey로 변환하기 위해 콘텐츠 ID 등을 가져와야하지만,이 모든 것을 하나의 앱에서 할 수 있습니다. – Soviut

+0

편집 해 주셔서 감사합니다. 당신의 업데이트는 제가하려고했던 것보다 훨씬 간단합니다. 참고로 모델에 ManyToManyField가 있으면주의해야합니다. 나는 South 0.6.2가 어려움을 겪고 있다고 생각한다. – istruble

관련 문제