또 다른 옵션은 외래 키를 추가하기 전에 data migration을 만들어 특정 ID로 새 Player 인스턴스를 만드는 것입니다. 해당 id가 이전에 데이터베이스에 존재하지 않는지 확인하십시오.
1.Create 데이터 마이그레이션 파일
$ ./manage.py datamigration myapp add_player
Created 00XX_add_player.py
2.Edit 전달 및 뒤로 파일의 방법 :
def forwards(self, orm):
orm['myapp.Player'].objects.create(name=u'Very misterious player', id=34)
def backwards(self, orm):
# Haven't tested this one yet
orm['myapp.Player'].objects.filter(id=34).delete()
3.Add 당신의 미스터리 클래스에 외래 키 스키마를 다시 이주하십시오. 그것은
$ ./manage.py schemamigration --auto myapp
? The field 'Mistery.player' does not have a default specified, yet is NOT NULL.
? Since you are adding this field, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
? Please select a choice: 2
? Please enter Python code for your one-off default value.
? The datetime module is available, so you can do e.g. datetime.date.today()
>>> 34
+ Added field player on myapp.Mistery
Created 0010_auto__add_field_mistery_player.py. You can now apply this migration with: ./manage.py migrate myapp
(34)가 4.Finally 마이그레이션 명령을 실행,이 예에서, 데이터 마이그레이션 ID에 대한 기본 값을 물어볼 것입니다 그것은 새로운 선수를 삽입하고 모든 업데이트 순서로 마이그레이션을 실행합니다 새로운 플레이어에 대한 참조가있는 미스터리 행.
는 다음 남쪽으로 알고 있어야 7. 실행이 비어있을 수 없기 때문에, player' 필드'에 무엇을 넣어 값. 한 가지 가능한 해결책은 다음과 같습니다. 2. 일회용을 지정하고 1을 입력하십시오. 이제 기존 미스터리 개체 모두가 pk = 1 인 플레이어를 가리 킵니다. 그러면 관리자 (필요한 경우)에서 변경할 수 있습니다. – stalk
도움을 주셔서 감사합니다. – MaT
답변으로 작성하겠습니다. – stalk