03.-3 Users 앱 - 필드 추가

조재훈·2022년 7월 16일
0

Clone_Airbnb

목록 보기
8/31
post-thumbnail

1) 필드 추가

생일, 언어, 통화, superhost에 대한 필드 추가

생일은 날짜이므로 DateField,

birthdate = models.DateField(null=True)

언어는 문자열이므로 CharField이되, 임의로 입력하는 것이 아니라 선택지를 주기

LANGUAGE_ENGLISH = "en"
LANGUAGE_KOREAN = "kr"

LANGUAGE_CHOICES = (
   (LANGUAGE_ENGLISH, "English"),
   (LANGUAGE_KOREAN, "Korean"),
)

language = (choices=LANGUAGE_CHOICES, maxlength=2, null=True, blank-True)

통화 역시 문자열이기에 CharField이고 선택지 부여하기

CURRENCY_USD = "usd"
CURRENCY_KRW = "krw"

CURRENCY_CHOICES = (
   (CURRENCY_USD, "USD"),
   (CURRENCY_KRW, "KRW"),
)

currency = (choices=CURRENCY_CHOICES, max_length=3, null=True, blank=True)

superhost는 집주인이 해당하는지 여부만 확인하면 되므로 BooleanField 사용

superhost = models.BooleanField(default=False)

새로운 필드를 추가했으니 migrate를 한다.
그리고 admin 페이지 들어가보면 잘 추가된 것을 볼 수 있다.


2) admin.py - list_display 편집

아래처럼 휑한 admin 페이지를 수정할 것이다.

현재 admin.py

여기서

@admin.register(models.User)

는 데코레이터로서 'user를 컨트롤하는 클래스가 바로 이 클래스다' 라는 것으 의미하며, 클래스 바로 위에 적어준다. 다음과 동일한 역할을 수행한다

admin.site.register(models.User, CustomUserAdmin)

현재는 admin 페이지에서 Users에 들어가보면 아무것도 안떠있다.

여기에 user들에 대한 정보를 함께 표시해주려 한다. username, gender, language, currency, superhost 에 대한 내용을 메인에 추가해주자.

list_display = ('username', 'gender', 'language', 'currency', 'superhost')

새로고침해보면 아래처럼 항목들이 추가된 것을 볼 수 있다.

정보를 적절히 채워주면 잘 나타난다.


3) admin.py - list_filter 편집

admin 페이지에서 필드 내용이 표시되게 해주었고 이 내용들을 필터로 보여주게 하자.

list_filter = ("superhost",)

admin 페이지를 보면 우측에 필터창이 생겼다.

현재 등록된 유저가 superhost가 아니기 때문에 필터창에 superhost를 yes로 클릭하면 검색 결과가 안나온다.

language와 currency도 추가하자.

이때 filter에 등장하는 글귀는 Choices에 입력한 항목과 동일하다.

4) admin 패널 확장

우선 UserAdmin 클래스를 import 한다

from django.contrib.auth.admin import UserAdmin

그리고 CustomUserAdmin 클래스가 상속받는 클래스를 교체해준다.

class CustomUserAdmin(UserAdmin):
   pass

그리고 admin 페이지를 새로고침하면 약간 달라진 것을 볼 수 있다.

왜냐면 이 UserAdmin 코드를 살펴보면 기본적으로 lsit_display와 list_filter가 다음과 같이 설정되어있다.

list_display = ("username", "email", "first_name", "last_name", "is_staff")
list_filter = ("is_staff", "is_superuser", "is_active", "groups")

그리고 Users 세부 페이지에도 변경이 생겼다. Personal info, Permissions, Important dates 라는 파란 띠가 생겼다.

그리고 비밀번호 바꾸는 form도 생겼다.

5) fieldsets 적용

fieldsets은 필드들을 묶어놓은 집합으로 위에서 파란띠로 묶인 단위에 해당한다. Dictionary를 품은 Tuple 형식으로 작성되며 제목과 내용(필드)로 구분된다.

fieldsets = (
   ("제목1", {"fields": ("필드1", "필드2",...}),
   ("제목2", {"fields": ("필드3", "필드4",...}),
.....
)

위 파란 띠가 나타났던 것도 UserAdmin에 fieldsets가 정의되어있기 때문이다.

그러니 이를 적용해서 admin.py 파일에 fieldsets을 추가하자.

fieldsets = (("Banana", {"fields":("avatar", "gender", "bio"}),)

기존에 UserAdmin에 있던 정보도 함께 나타나길 원한다면 다음과 같이 수정한다.

fieldsets = UserAdmin.fieldsets + (("Banana", {"fields":("avatar", "gender", "bio")}),)

다른 필드들도 추가하자.

6) 그 외

장고는 ORM (Object Relational Mapping) 이라는 것을 가지고 있어서 SQL을 쓰지 않고도 models.py에 입력한 파이썬 구문만으로 DB를 관리할 수 있다.

그리고 향후 3rd party app들을 장고에서 편하게 쓰기 위해 settings.py에 추가해주자.

THIRD_PARTY_APPS = []
INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS + THIRD_PARTY_APPS

그리고 현재까지 생성된 기록을 초기화할건데 DateTime을 제외한 모든 필드의 null=True를 제거한다.

또한 db.sqlite3파일과 pycache, 모든 migration 파일들을 삭제한다. 그리고 migration을 다시 한 뒤에 superuser도 생성한다.

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글