2017-12-20 10 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) 
     ) 
    ] 
이 링크를 참조하십시오