2017-12-20 7 views
0

後にすべての同一のUUID:ジャンゴ:私はすべてのモデルにUUIDを追加するミックスインを持って、移行

class UUIDable(models.Model): 
    uuid = UUIDField(db_index=True, 
        default=uuid.uuid4, 
        editable=False) 

    class Meta: 
     abstract = True 

私は内部Articleオブジェクトと既存のデータベースを持っています。 上記のmixinを使用して、Articleクラスにuuidフィールドを追加しました。 移行を実行すると、すべての記事にSAME UUIDが追加されました。 私はすべてのオブジェクトが異なるUUIDを持つことを期待しました。

なぜですか?

class Migration(migrations.Migration): 

    dependencies = [ 
     ('products', '0009_auto_20171218_1630'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='article', 
      name='uuid', 
      field=models.UUIDField(db_index=True, default=uuid.uuid4, editable=False), 
     ), 
    ] 

答えて

0

あなたの移行は特異値を追加して、あなたの移行時に、それを変更する必要があります。ここ

が自動的に作成された移行ファイルです。このリンクを参照してください:"Migrations that add unique fields"

は、移行のフィールドを変更してみてください。

from django.db import migrations, models 
import uuid 

def create_uuid(apps, schema_editor): 
    Article = apps.get_model('products', 'Article') 
    for device in Article.objects.all(): 
     device.uuid = uuid.uuid4() 
     device.save() 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('products', '0009_auto_20171218_1630'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='article', 
      name='uuid', 
      field=models.UUIDField(blank=True, null=True), 
     ), 
     migrations.RunPython(create_uuid), 
     migrations.AlterField(
      model_name='article', 
      name='uuid', 
      field=models.UUIDField(unique=True) 
     ) 
    ] 
関連する問題