2017-06-20 44 views
0

あるモデルから別のモデルにデータを移動する必要がある場合(古いモデルのデータがある場合)別のモデルと別のモデルを順番に移動する必要がある場合このプロセスをマイグレーションファイルに追加して、ちょうどpython manage.py migrateコマンドで要件を達成することができます。マイグレーションを使用してデータを移動する方法

これは、すべての古いアイテムが存在するモデルである:

class UserFavorite(CreatedAtMixin): 
    user = models.ForeignKey('auth.User') 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

objects = UserFavoriteManager() 

def __str__(self): 
    try: 
     return str(self.content_object) 
    except AttributeError: 
     return 'None' 

class Meta: 
    get_latest_by = "date_added" 
    unique_together = ("user", "content_type", "object_id")` 

をここでは、私は上記のモデルでは項目ごとに、最初の項目を挿入する必要があるモデルです。

class CollectionItem(models.Model): 

sort_number=models.PositiveIntegerField(blank=True,null=True) 
type=models.CharField(max_length=20,null=False, blank=False) 
item_type = models.ForeignKey(ContentType, limit_choices_to=models.Q(app_label='news', model='News') | models.Q(app_label='work', model='Work') | models.Q(app_label='collection', model='Quote')) 
item_id = models.PositiveIntegerField() 
item = generic.GenericForeignKey('item_type', 'item_id') 

class Meta: 
    verbose_name = "Collection Item" 
    verbose_name_plural = "Collection Items" 
def __str__(self): 
    return self.item.title 

その後、私が必要

class Collections(CreatedAtMixin): 
user = models.ForeignKey('auth.User', related_name='collections_user') 
collection_place=models.ForeignKey('companies.CompanyOffice',related_name='collections_place',null=True) 
collection_name = models.CharField(max_length=40,null=False, blank=False) 
description = models.TextField(null=True, blank=True) 
items=models.ManyToManyField('collection.CollectionItem') 
def __str__(self): 
    return self.collection_name 

class Meta: 
    unique_together = ("user","collection_name") 
    verbose_name = "Collection" 
    verbose_name_plural = "Collections" 
    ordering = [ '-created_at'] 
    get_latest_by = "created_at" 

答えて

1

最初に新しいモデルとcreate a schema migrationを書きます。

次にcreate a data migrationを入力し、古いモデルデータを新しいモデルに転送するために必要なコードを書き留めます(ヒント:可能であれば、移行を元に戻すコードも書きます)。

最後に、古いモデルがもう使用されないと仮定して、古いモデルのコードを削除し、最後のスキーマ移行を作成します。

詳細はすべて上記のリンクに記載されており、残っているものはアプリケーションに固有のものなので、私たちはさらに助けません。

関連する問題