Notice
Recent Posts
Recent Comments
Link
오늘도 개발
모델 필드 추가 시 default 값 설정 본문
모델에 새로운 필드를 추가할 때 default 값을 지정한 후 마이그레이션하면,
기존에 있던 데이터의 새 필드에도 알아서 default 값을 채워준다.
예)
1. 기존 모델
class User(models.Model):
accept_notification = models.BooleanField()
User.objects.all()
# <User: User object (1)>
2. 필드 추가
class User(models.Model):
accept_notification = models.BooleanField()
accept_email_notification = models.BooleanField(default=False, null=True)
3. 마이그레이션
python manage.py makemigrations
python manage.py migrate
4. 기존 데이터의 새 필드 값 확인
User.objects.get(id=1).is_accept_email_notification
# False
유의할 점
장고가 DB에 마이그레이션 할 때 DB 테이블에 락이 걸린다.
데이터 개수가 10만개 이상인 큰 테이블을 위의 방식으로 작업한다면( = migration으로 자동으로 default 값 채워주기),
락이 걸리는 시간이 길어지므로 다운타임이 길어지는 문제가 발생한다.
큰 테이블에 디폴트 값이 있어야 하는 필드를 추가할 때는 아래의 방식을 사용하는 것이 더 낫다.
1. 필드 추가 : default 없이 null=True 옵션만 적용
class User(models.Model):
accept_notification = models.BooleanField()
accept_email_notification = models.BooleanField(null=true)
2. 마이그레이션
python manage.py makemigrations
python manage.py migrate
3. 쉘이나 주피터 노트북으로 디폴트 값 삽입
기존에 있던 User 오브젝트의 accept_email_notification 필드에 디폴트 값 False를 쉘을 이용하여 수동으로 채워준다.
4. 추가된 필드에 디폴트 값 추가
class User(models.Model):
accept_notification = models.BooleanField()
accept_email_notification = models.BooleanField(null=true, default=False)
5. 마이그레이션
python manage.py makemigrations
python manage.py migrate'웹 프로그래밍 > Django' 카테고리의 다른 글
| update와 bulk_update (0) | 2023.02.27 |
|---|---|
| 장고가 이미 반영한 마이그레이션을 가려내는 방법 (0) | 2023.02.18 |
| 한 모델에 있는 모든 필드 확인하기 (0) | 2023.02.18 |
| refresh_from_db() (0) | 2023.02.18 |
| django에 데이터베이스 여러 개 연결하기 (0) | 2023.02.18 |