본문 바로가기
airbnb clone coding

[Django] 5_1. Users App: Customize

by busybee-busylife 2024. 7. 11.
반응형

User 모델을 customizer하는 방법 

 

1. 부가적으로 Profile 모델을 생성(비추)

Django의 User 모델은 기본적으로 주어짐 

추가적으로 Profile 모델을 생성하여 -> Django의 User모델과 연결한다 

 

2. 기본 user 모델을 아예 custom user 모델로 대체(권장)

처음부터 user model을 교체하여 시작한다(django 개발의 첫단계)

Django의 user를 상속받는 나만의 user는 만드는 것 

 

 

1) AbstractUser에서 상속받아 User 클래스를 만든다 

 

 

 

 

2) Django에게 나만의 custom user model을 사용한다고 알려준다  

 

 

 

 

3) 데이터베이스 삭제하고 서버 재실행

데이터베이스와 houses의 migrations 안의 파일 3개를 삭제 후 서버 재접속 

데이터베이스를 삭제했으니 user를 새롭게 생성해야한다

(python manage.py createsuperuser)

migration 적용 

 

 

 

 

4) user모델을 관리하는 클래스 생성 

강의에서 알려준 첫번째 방식으로는 admin 패널에 Users 앱이 보이지 않아서 

두번째 코드를 이용하여 User 모델을 admin 패널에 직접 등록했다 

 

 

 

나만의 custom user 모델 만들기 

기존의 항목(first_name, last_name...)들을 그대로 사용해야한다. 임의로 변경하면 안된다 

변경하고 싶으면 override하는 방식으로 

first_name, last_name을 사용하지 않으려면: editable=False 

 

🚨여기서 문제 발생 🚨

name, is_host를 새로 추가하면: 기존 사용자들은 이들에 대한 값이 없음 

위 코드를 migration 할 때 에러 발생

It is impossible to add a non-nullable field 'is_host' to user without specifying a default. This is because 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) Quit and manually define a default value in models.py.

'is_host'는 not_nullable field 인데, 기존 사용자들에 대해서는 null값이 생기는 것

 

🤸 해결방안 🤸

1) models.py로 돌아가서 is_host의 default 값을 지정한다 

2) null = False라고 지정함으로써 'is_host'를 nullable로 만든다 

 

'name'에 대해서도 마찬가지로 default 값(empty string)을 지정해준다 

 

 

Field Set

섹션 안에 field 를 넣는다

1) 모델의 field가 보이는 순서를 설정 

2) 섹션 안에 field를 넣어서 그 섹션에 제목을 붙일 수 있다 

새로운 field가 생겼다!

 

 

 

List Display

반응형