Django 질문드려요.

조회수 5254회

질문드려요. 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을 추가하니 저렇게 뜨던데 어떻게 하면 될까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 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이 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)