-
Create User Model and Admin PanelProject using python/Cloning Airbnb 2021. 2. 19. 22:41
users/models.py
AbstractUser와 django.db.models
User는 AbstractUser를 상속한다. AbstractUser는 Django에서 기본적으로 제공하는 User model을 제공한다. User는 AbstractUser를 상속하고 추가적으로 9~15line에 있는 field를 추가함으로써 model을 customizing을 할 수 있다.
models에는 여러가지 Field가 있다. 여기서 사용된 것은 ImageField, TextField, CharField, DateField, BoolenaField다. 각각에 맞게 blank와 null 값을 True로 해줘야 python manage.py makemigrations 명령어가 작동한다. 그리고 ImageField 같은 경우는 Pillow module을 설치해야 한다.
Pillow는 python imagefiled handler다. pipenv install Pillow로 설치해준다.
Choices
choices는 Charfield에서 html의 select 처럼 여러 가지를 선택을 할 수 있는 값을 정의할 수 있다. GENDER_CHOICES를 보면 튜플 안에 총 3개의 튜플을 선언했다. GENDER_MALE="Male"을 정의했고 GENDER_CHOICES 안에 (GENDER_MALE, "Male")을 해줬다. 여기서 "Male"이 아닌 "male"을 해도 상관 없다. 꼭 GENDER_MALE과 같을 필요는 없다.
users/admin.py
이제 model에서 만든 field 들을 admin panel을 통해서 확인해 보자. django는 개쩔기 때문에, admin.py에서 몇가지 설정만 해주면 admin panel에서 바로 내가 만든 field들을 볼 수 있다.
Create admin
@admin.register(models.User) decorator 을 통해서 user model을 admin에 등록할 수 있다. 그리고 그 바로 밑에 Useradmin을 상속하는 admin class를 생성한다.
@(decorator) 특성상 무조건 @admin.register(models.User) 밑에 생성해야 한다./admin으로 접속해보면 Users category가 생긴 것을 확인할 수 있다.
list_display
list_display는 admin의 list page에서 field를 보여준다.
빨간 박스 부분이 list_display 부분이다.
list_filter
admin의 list page에서 filter를 담당한다. list_filter에 정의된 대로 list page에서 오른쪽에 filter를 추가한다.
빨간 박스 부분이 list_filter 부분이다. 사진이 짤렸지만 그 밑으로 By language, currency, superhost가 있다.
fieldsets
fieldstes는 admin의 add와 change page에서 layout 구성을 담당한다. 백문이 불여일견! admin screenshot을 보자.
"Custom Profile" 부분은 개발자가 지정하는 이름이고 "fields"를 key 값으로 받고 value로 model의 field 값들을 가지고 있는 tuple을 받는다.
앞으로 만들 rooms, reservations, photos 등을 이런식으로 만들면 된다.
참고 자료
- 노마드 코더의 Airbnb 클론 강의
- Django Model
- Django Admin
- AbstractUser
소스 코드
github.com/zpskek/airbnb-clone-v3/commit/d8339c8646f881560c609de3d8067482ee573f10
'Project using python > Cloning Airbnb' 카테고리의 다른 글
Create Room Model and Admin and Core Model (0) 2021.02.20 Django commands (0) 2021.02.20 Django User setting (0) 2021.02.19 Create Django Apps (0) 2021.02.19 Django settup (0) 2021.02.19