2017-03-14 13 views
0

一度に1つの外部キーで、管理対象外モデルから管理対象モデルに徐々に移行しています。現在の状況:管理対象外のモデルの外部キーからDjango 1.7の管理対象モデルにデータを移行するにはどうすればよいですか?

class OldOrg(Model): 
    pass 

    class Meta: 
     managed = False 

class OldService(Model): 
    offered_by = models.ForeignKey(OldOrg) 

    class Meta: 
     managed = False 

class NewOrg(Model): 
    org = models.OneToOneKey(OldOrg) 

class NewService(Model): 
    service = OneToOneKey(OldService) 

次のステップ:

class NewService(Model): 
    service = OneToOneKey(OldService) 
    offered_by = models.ForeignKey(NewOrg) 

問題はDjangoの作り付けの移行システムを使用して、データの移行に起こります。フィールドOldService.offered_byは存在しないので、NewService.offered_byで使用するためにNewOrg主キーに到達するために使用することはできません。移行で

# This works in the shell but not in a migration 
for ns in NewService.objects.all(): 
    ns.offered_by = ns.service.offered_by.new_org 

OldServiceは、いずれかのフィールドoffered_by_idを持っていません。 OldServiceのデータを取得する他の方法はありますか?

答えて

0

私は解決策を見つけたが、私はそれを好きではない:移行中にできるだけ生のSQLとして

用途:

from django.db import connection 

def copy_org(apps, schema_editor): 
    NewService = apps.get_model('myapp', 'NewService') 
    with connection.cursor() as cursor: 
     cursor.execute('SELECT id, offered_by FROM myapp_old_service') 
     old_services = dict(cursor.fetchall()) 
    for ns in NewService.objects.all(): 
     ns.offered_by = old_services[ns.pk] 
     ns.save() 
関連する問題