2011-03-21 6 views
4

장고 응용 프로그램을 만들었습니다. 이제 모델에서 db 필드의 필드 유형을 1 개 변경하고 싶습니다. 현재 데이터베이스에 이미있는 레코드가 있기 때문에 models.py에서 단순히 레코드를 변경하여 형식을 변경할 수 없다고 생각합니다. 인터넷 검색을 통해 SQL 콘솔을 통해 테이블을 변경함으로써 테이블을 삭제하지 않고도 변경 될 수 있음을 알게되었습니다. 하지만 장고 초보자 나는 이것을 할 수 없습니다. 누군가 제가이 일을하도록 도울 수 있습니까? 이것은 내 models.py테이블을 삭제하지 않고 모델에서 Django 데이터 유형 변경

class EmployeeDetails(models.Model): 
    userName = models.CharField(max_length=200) 
    designation = models.CharField(max_length=200) 
    employeeID = models.IntegerField() 
    contactNumber = models.CharField(max_length=200) 
    project = models.CharField(max_length=200) 
    dateOfJoin=models.TextField() 

이제 dateOfJoin = models.DateField()를 변경하고 싶습니다. 어떻게하면 SQL 콘솔 명령을 사용하여 테이블을 삭제하지 않고도 TextFieild를 DateField로 변경할 수 있습니까?

+0

아무도 장고 버전> 1.7로 대답 해 주시겠습니까? – Jay

답변

0

을도 미만 5 단계에서이 작업을 수행 할 수 있지만, 마이그레이션으로 취소하거나, 내가 별개의 단계를 선호 때로는 재현 까다로운 일이 될 수 있습니다 나는 다른에서 일하고 있어요 방법. 나는 SQL 콘솔을 통해 데이터베이스를 선택하고 SQL 쿼리로 새로운 컬럼을 추가했다. 그리고 그게 잘 작동 :), 도와 줘서 고마워요 많은 사람들이 ..

2

South project은 일반적으로 스키마와 데이터를 마이그레이션하는 데 사용됩니다. 텍스트 필드를 날짜 필드로 변환하는 데 사용할 수 있다면 확실하지 않습니다.하지만 그렇게 할 수 있으면 놀라지 않을 것입니다.

그런 다음 추가

./manage.py convert_to_south yourapp 

이 마이그레이션 폴더와 가짜 첫 번째 마이그레이션을 생성합니다 :

18

당신이 필요로하는 응용 프로그램은 South
여기 (자세한 내용은 문서 참조) 단계입니다입니다 a new_dateOfJoin 귀하의 models.py의 DateField :

./manage.py migrate yourapp 

이렇게하면 (_... 0002라는 이름의) Y immediatly 마이그레이션은

그런 다음 적용이 마이그레이션을 그냥 날짜에 텍스트 값을 캐스팅하는 datamigration 0003 file을 만들고 새로운 분야 에 저장 DB에이 필드를 추가합니다 :

'

마지막 단계는 그래서 당신은 돈 DB를 필드 이름을 변경하는 것입니다 (이것은 0004 _.... 마이그레이션 파일을 만듭니다) 이전하여 DateField을 다시 댓글을 마이그레이션하여 models.py 파일을 수정

./manage.py migrate yourapp 

기존 코드를 수정해야합니다.

./manage.py schemamigration yourapp rename_dateofjoin --empty 
here 설명처럼 수동이 0005 파일을 수정 0005_rename_dateofjoin
라는 이름의 빈 스키마 마이그레이션 파일을 만들 수 있지만 this other example에 같은 db.rename_column('app_foo', 'name', 'full_name')을 사용합니다.

이 5 단계 대신 전체 테이블을 삭제하는 것이 더 쉽지만, 앱의 여러 인스턴스 (작업중인 프로덕션 서버 및 개발 머신)가있는 경우 이러한 종류의 도구가 필요합니다. 한국의 이해와
이 하나 ...

+0

도미니크 답장을 보내 주셔서 감사합니다 :) –

+0

반갑습니다. 귀하의 질문에 대한 답변이 있으면 내 대답 옆에있는 "확인"마크를 클릭하여 질문을 닫으십시오. –

+0

고맙습니다. 매우 유용한 워크 스루! – Nils

관련 문제