2015-01-18 1 views
4

내 프로젝트에 django-orderedmodel (https://github.com/kirelagin/django-orderedmodel)을 사용하려고합니다.Django 1.7 : Makemigration : nullable 필드가 아닌 것

실행 makemigrations이 작동하지 않습니다

You are trying to add a non-nullable field 'order' to slide without a default; we can't do that (the database needs something to populate existing rows). 
Please select a fix: 
1) Provide a one-off default now (will be set on all existing rows) 
2) Quit, and let me add a default in models.py 
Select an option: 

내가이 잘못하고 있어요 어디 있는지 알고 싶습니다. order 필드가 고유으로 감사

+1

아무 잘못도 없습니다. 테이블에 기존 행이 있고 기본값이 없지만 Null을 허용하지 않는 필드를 추가하려고합니다. – Brandon

+0

문제 해결 방법을 선택할 수 있습니다. 옵션을 선택하십시오. –

답변

4

, 당신은 마이그레이션 원래 operations를 교체, 여러 마이그레이션 단계에 필드를 추가해야합니다 :

  • 가 널 (NULL) 필드를 추가, NULL에 기본값을 설정합니다.
  • 필드를 각 행에서 고유 한 값으로 설정하십시오.
  • NOT NULL 제약 조건을 추가하십시오.

e.e. 이 같은 : set_order가 유효한 값으로 order을 설정하는 기능, 예를 들면이다

operations = [ 
    migrations.AddField('myapp.MyModel', 'order', models.PositiveIntegerField(null=True, unique=True)), 
    migrations.RunPython(set_order), 
    migrations.AlterField('myapp.MyModel', 'order', models.PositiveIntegerField(blank=True, unique=True)), 
] 

:

def set_order(apps, schema_editor): 
    MyModel = apps.get_model('myapp', 'MyModel') 
    for i, model in enumerate(MyModel.objects.all()): 
     model.order = i 
     model.save() 

그것은 디폴트 값 (즉, 0)를 제공하는 가장 쉬운 방법은, 그리고이 후 교체 생성 된 마이그레이션에서 operations.

관련 문제