models.py
에 테이블 클래스를 작성하고 마이그레이션 하게 되면 다음과 같은 오류가 발생할 때가 있다. 주로 새로운 테이블을 넣기 위해 클래스를 작성하고 마이그레이션을 시도하면 발생한다.
You are trying to change the nullable field 'slug' on post to non-nullable 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 with a null value for this column)
2) Ignore for now, and let me handle existing rows with NULL myself (e.g. because you added a RunPython or RunSQL
operation to handle NULL values in a previous data migration)
3) Quit, and let me add a default in models.py
Select an option:
이 오류는 기존에 makemigrations를 통해 존재하는 정보들을 어떻게 수정할지 정하지 않았기 때문에 나는 오류입니다.
테이블 클래스의 코드를 수정함으로서 오류를 해결할 수 있습니다.
CharField(default = '')
CharField(null = True)
아니면 옵션을 선택해 데이터 값을 직접 넣어서 해결할 수 있습니다.
마지막 방법으로는 마이그레이션 할 때마다 init파일이 생성됩니다. 이것을 다 지우고 테이블을 한꺼번에 밀어넣는 방법입니다. 이 방법은 개인적으로 학습할 때 테이블을 날려도 되는 상황일 때 쓰는 것을 당부드립니다.
위의 마이그레이션 안에 001_init.py
을 지우면 됩니다. 기존의 __init__.py
파일은 지우면 안됩니다.
이후 깔끔하게 지우고 문제가 있는 해당 테이블을 지워줍니다.
테이블 삭제
DROP TABLE 테이블이름;
마이그레이션 파일 보기
SELECT * FROM django_migrations;
마이그레이션 파일 삭제
delete from django_migrations where app = 'app이름';
마이그레이션 목록이다. 해당 문제가 있는 마이그레이션 파일을 전부 삭제 해준다.
이후 다시 마이그레이션을 해주면 테이블을 잘 생성되는 것을 볼 수 있다.