Django 질문드려요.


질문드려요. You are trying to add a non-nullable field 'address' to register without a default; we can't do that (the database needs something to popul ate existing rows). Please select a fix:

라는 메시지가 나오는데요. models.py

class Register(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE)
    company=models.CharField(max_length=30)
    office=models.CharField(max_length=30)
    address=models.CharField(max_length=100)
    tel=models.CharField(max_length=30)

froms.py

class RegistrationForm(UserCreationForm):
    address=forms.CharField(widget=forms.TextInput(attrs=dict(required=True,     max_length=100)),label=_("주소"))
    tel=forms.CharField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)),label=_("연락처"))

몇일전 Register models에 name 이 있었는데 address 로 변경 및 tel을 추가하니 저렇게 뜨던데 어떻게 하면 될까요?

  • 2016년 05월 11일에 작성됨

  • onetotone문제는 마이그레이션 시 migrate --fake 추가해주세요.    Demi   2016.5.12 14:14     
조회수 234


1 답변


좋아요
2
싫어요
채택취소하기

You are trying to add a non-nullable field 'address' to register without a default; we can't do that (the database needs something to popul ate existing rows). Please select a fix:

이 오류는 DB를 수정한 경우 자주 발생합니다. 이번 경우는 address 필드를 수정하셨을 때, 기존에 존재하는 정보들을 어떻게 수정할 건지 정하지 않았기 때문에 발생합니다.

예를들어 원래 Register모델에 address field가 없었는데 이번에 address field를 새로 추가해 마이그레이션 할 때, 장고가 기존에 있었던 Register 정보들(existing row)에는 address field에 어떤 정보를 추가해야되나요? 라고 물어보는 겁니다.


해결방법은 두가지가 있는데요.

첫번째는 Field에 default 값을 설정해주는 겁니다. 예를 들면

CharField(default = "종로구 창신동")

이렇게 설정한 후 마이그레이션 하면 기존에 있었던 Register object들의 주소는 전부 종로구 창신동으로 설정됩니다.

두번째는 null을 허용해주는 겁니다.

CharField(null=True)

이렇게 설정한 후, 마이그레이션 하면 기존에 있었던 Register object들의 주소는 null이 됩니다.

  • 2016년 05월 11일에 작성됨
    시원한 날만 일하자

  • 감사합니다.    고요한   2016.5.11 11:13     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close