2016-06-08 97 views
0

假設我有這樣的模型結構:Django的遷移模型之間唯一的字段數據

class User(AbstractUser): 
    first_name = models.CharField(max_length=40, blank=True) 
    last_name = models.CharField(max_length=40, blank=True) 


class UserProfile(models.Model): 
    uuid = models.UUIDField(unique=True, null=False, default=uuid4) 
    user = models.OneToOneField(User) 

我想用戶配置合併到用戶模式,就像這樣:

class User(AbstractUser): 
    first_name = models.CharField(max_length=40, blank=True) 
    last_name = models.CharField(max_length=40, blank=True) 
    uuid = models.UUIDField(unique=True, null=False, default=uuid4) 

最重要的是將現有的uuidUserProfile模型遷移到新的User.uuid(唯一)字段。那應該如何在django> 1.7遷移中進行管理?

回答

1

首先,將uuid字段添加到User模型。創建一個遷移。

然後,創建一個data migration並添加一個RunPython操作來調用將數據從舊模型複製到新模型的函數。喜歡的東西:

def copy_uuid(apps, schema_editor): 
    User = apps.get_model("myapp", "User") 

    # loop, or... 
    User.objects.update(uuid=F("userprofile__uuid")) 

class Migration(migrations.Migration): 
    dependencies = [] 

    operations = [ 
     migrations.RunPython(copy_uuid), 
    ] 

一旦你遷移,並確保一切正常,你可以刪除另一個遷移UserProfile模型。