Models
Django의 프로젝트에서 app을 만들 때 기본적으로 터미널에서 다음과 같은 명령어를 실행합니다.
터미널 → python manage.py startapp houses
houses라는 app이름을 가진 app을 만들어줍니다.
터미널 -> python manage.py startapp 앱이름
생성할 애플리케이션의 이름을 설정하고 위의 명령어를 실행시키면 아래의 그림과 같이 하나의 폴더가 생성됩니다.
houses 앱 디렉토리 하위에 model.py 라는 파일이 생성되었습니다.
나중에 더 자세히 설명하겠지만, houses의 model은 houses 라는 app의 데이터 베이스의 모양을 의미합니다.
데이터 베이스의 모양이라는 말이 아직 와닿지 않겠지만 , 이후에 더 자세히 설명하겠습니다.
명령어를 통해 애플리케이션을 설치했다면
config 폴더에 있는 settings.py 파일로 가서 INSTALLED_SYSTEM 에 "houses.apps.HousesConfig" 를 추가해주셔야 합니다.
반드시 !!
Migrations
models.py
데이터베이스는 파이썬 코드로 소통하지 않고 SQL로 소통합니다.
그런데 Django는 우리를 대신하여 데이터베이스와 소통합니다. 즉, 우리가 파이썬 코드를 작성하면 Django는 SQL로 번역합니다.
Django는 우리의 커스텀 데이터에 대한 관리 패널을 자동으로 생성해 줄 것입니다.
Admin 설정
admin 패널에 model에서 정의한 데이터 베이스를 가져옵니다.
데코레이터인 @admin.register 를 사용합니다 !!
하지만 이렇게 admin을 등록하고 House라는 어드민 페이지가 생성된 것을 확인할 수 있지만
Houses를 클릭하면 다음과 같은 오류가 발생합니다.
‘no such table’
이 오류는 django가 데이터베이스에서 table 을 찾고 있지만 데이터베이스에 해당 table이 존재하지 않아서 발생하는 오류입니다. django가 필요로 하는 데이터베이스의 모양과 같지 않다는 것을 의미하죠.
이제 여기서 우리는 migration에 대해서 자세히 알아봐야합니다.
일단 우리는 model을 만들었습니다.
즉, 우리 애플리케이션이 일부 데이터를 데이터베이스에 저장할 거라고 해줬다는 거에요.
django는 이 model을 이해하지만 데이터베이스(db.sqlite3) 파일은 House model에 대해서 전혀 모르는 상태이죠.
그래서 우리는 데이터베이스에게 House model 에 대해서 알려줘야 합니다.
우리는 데이터베이스의 형태를 수정해야 합니다.
데이터베이스를 수정하는 방법은 migration입니다.
터미널 → python manage.py makemigrations
이 명령어를 실행하게 되면 houses/migrations 라는 폴더 내부에 파일을 만들었습니다.
터미널 → python manage.py migrate
요 명령어를 통해서 우리는 데이터베이스의 모양을 업데이트 해줬습니다. !!
⭐️ 여러분이 model에서 어느 부분을 수정하던 간에 데이터베이스에게 그 사실을 알려줘야 합니다.
다시 Houses를 클릭하고 Add house 버튼을 클릭하면
우리가 python 코드에 작성한 field 들이 form에 반영되어 있습니다. ( model.py 에 작성해준 커스텀 필드들 )
⭐️요약
model.py 에 작성한 내용은 django에게 데이터베이스의 모양을 설명한 것이고, django는 그걸 이해하고 우리에게 그 데이터에 대한 admin 패널을 주었습니다.
전체적인 Recap
우선 저희는 python manage.py startapp houses 라는 명령어를 통해서 House 를 위한 애플리케이션을 만들었습니다.
그리고 settings.py 에서 애플리케이션 설치 ("houses.apps.HousesConfig", 을 입력함 )
settings.py 에서 이 부분만 수정을 해줄게요.
Installed_apps 를 우리가 만든 app들과 system에 존재하는 app들로 나누어서 정의하고 둘을 합치는 거죠.
INSTALLED_APPS 은 반드시 있어야합니다.
django는 프레임워크라서 INSTALLED_APPS 을 반드시 인식해야 정상적으로 작동하기 때문이에요.
데이터 베이스 Recap
- django는 우리를 위해 데이터 베이스와 소통을 해줍니다. 진짜 좋은 기능이죠.
- 우리는 admin.py로 가서 그저 model 을 등록시키기만 해도 django가 admin 패널을 통째로 만들어주는 것을 확인했습니다. admin 패널은 생성 삭제 수정 등 모두 가능하게 합니다.
- model.py 에 python 코드로 작성한 데이터 베이스의 모양을 인식해서 admin 패널에 적용
- migration → 데이터베이스를 우리가 작성한 model.py와 연동시키려면 makemigrations , migrate 명령어 필요.
Admin 의 역할
django 는 프레임워크라서 우리가 따로 로직을 짜는 일은 없습니다. 다만 , 이미 만들어진 코드들을 적재적소에 잘 배치하는 것이 중요하죠.
다시 돌아가서 ,
Add House 로 house 를 추가했을 때, 저희는 house의 이름을 넣어줄거에요.
house 의 이름을 넣고 save를 누르면 우리가 설정한 이름과 다르게 House object(1) 이렇게 이름이 설정되어 있어요.
그냥 클래스의 이름을 출력하는거죠. 이렇게 보기는 싫으니까 model.py 의 class House에
def __str__(self):
return self.name
__str__ 함수를 추가해주면 간단하게 해결할 수 있습니다.
🌟 __str__ 함수는 파이썬의 내장 함수입니다. Django 에서는 admin 에서 데이터를 조회할 때 리스트 정보를 변경하기 위하여 사용합니다.
그러면 기본적인 Admin 패널을 설정하는 방법을 알아볼게요.
1. admin 패널에서 column들을 구현해볼거에요. 이런 식으로 만드는겁니다.
admin.py 파일에서 list_display 는 보시는 것처럼 column 들을 나눠주는 역할을 합니다.
물론 model의 property들이어야 합니다.
2. admin 패널에서 filtering 을 적용하도록 하겠습니다.
list_filter 는 정말 유용한 기능인 Filter 를 넣어줍니다. 엄청난 기능이죠.
단 하나의 문장으로 admin 패널에서 정말 편리한 기능들을 추가할 수 있습니다.
이렇게 admin 파일을 수정하면서 admin을 수정할 수 있습니다. !!
3. search bar
마지막으로 검색창 ( search bar ) 를 수정해봅니다.
search_fields = [’address’]를 통해서 search_bar를 만들어 줄 수 있습니다.
address__startswith 로 설정해주게 된다면 korea를 검색하고 싶을 때, ko 만 적어도 출력이 된답니다 :)
정말 유용하게 쓸 수 있는 기능들이 많아요.
Django 의 공식 문서들을 보면서 저런 기능들을 알아두면 좋을거 같네요!
⭐️ 지금 정말 정말 간단하게만 Django의 기본적인 활용 방법과 구조만 훑고 가는 수준으로 설명을 하고 있습니다.
쉽다고 생각하실 수도 있지만 사실 본격적으로 웹개발 과정을 들어가면 신경써야 할 부분들이 많기 때문에 지금부터 기본기를 정말 탄탄히 다지고 외울 부분들은 외우고 이해하시고 가는게 좋습니다. :)
나에게 하는 말. ㅠ