2010-01-13 5 views
0

이전에 "unique"가 True로 설정되었지만 지금은 False로 변경된 CharField가있는 모델이 있습니다. 하지만 그 필드를 저장하려고하면 존재하는 무언가로 django는 여전히 IntegrityError를 던집니다.django에서 "unqiue = True"에서 "unique = False"로 변경

고유하지 않은 값을 허용하도록이 동작을 어떻게 변경할 수 있습니까?

데이터베이스는 MySQL입니다.

답변

1

고유 색인을 삭제하십시오.

+1

을 당신이 가정은 MySQL의 테이블에 고유 인덱스를 삭제하는 것을 의미? (단지 Django 모델에서 색인을 삭제해야한다고 생각할지도 모르는 Django에 대한 새로운 사람들을위한 혼란을 피하기 위해) –

+0

그것은 실제로 내가 의미하는 것입니다. –

+0

좋아, 나는 이것을 시도했다 : 'ALTER TABLE'tblname' DROP INDEX'fieldname'' 그러나 그것은 그다지 효과가 없다. 여전히 무결성 오류가 있습니다. – espenhogbakk

0

웹 응용 프로그램을 다시 실행하기 전에 명령 줄에서 "python manage.py syncdb"명령을 사용하여 django에서 데이터베이스를 다시 동기화했는지 확인 했습니까? 이렇게하면 문제가 해결 될 수 있습니다.

+0

syncdb는 기존 테이블에 닿지 않으므로 문제가 해결되지 않습니다. 마이그레이션 도구는 남쪽과 같습니다. – fest

0

나는 똑같은 것을 시도하고 있었고 django-south 0.5의 경우 남쪽에서 이것을 처리하지 못했다.

이전 댓글에서 언급 한 것과 같이 먼저 남쪽 이전을 만들어야하지만, 수동으로 들어가서 django가 처음 syncdb를 만들 때 생성 한 고유 색인을 삭제해야합니다. 당신에게 테이블에 대한 스키마를 표시합니다, 당신은 필드가 여전히 키 열에서 "UNI"의 값을 가질 것을 확인할 수

use mydb; 
desc mytable; 

.

SHOW INDEX FROM mytable FROM mydb; 

는 "UNI는"키 열에 더 이상 볼 것, 다시 테이블 스키마를 보면 0

ALTER TABLE mytable DROP INDEX indexname; 

에 NON_UNIQUE 세트가 인덱스이어야한다.

2

http://south.aeracode.org을 사용하는 것이 좋습니다. 장고를위한 DB 마이그레이션 응용 프로그램이며 MySQL 셸/관리자를 터치하지 않고도 이러한 변경을 할 수 있습니다. 이렇게하면 모든 컴퓨터를 최신 DB 체계로 업데이트 할 수있는 재생 가능한 매크로를 사용할 수 있습니다.

그리고 그들이 여기에 무엇을 쓸만큼 간단합니다 사용 : http://south.aeracode.org/wiki/ConvertingAnApp