일기 대신 코드 슬쩍

[백엔드][장고][Django] Chapter #4 본문

Backend/Django

[백엔드][장고][Django] Chapter #4

코코자 2023. 12. 30. 13:00

#4.1 Migrations

우리가 파이썬 코드로 줘도, 장고는 데이터베이스를 위해 SQL코드로 번역해서 인식함

장고는 커스텀 데이터에 대한 관리 패널을 자동으로 생성해줌

admin.py에서 house model import해줌

from .models import House

그리고 또 다른 class를 만든다

from django.contrib import admin
from .models import House

@admin.register(House) # 이 밑의 class가 House 모델을 통제함
class HouseAdmin(admin.ModelAdmin): # 1) HouseAdmin이라는 class를 만들고, 2) ModelAdmin으로부터 모든걸 상속받음
    pass #ModelAdmin에서 아무것도 수정하지 않으므로 pass,

이거하고 서버 새로고침하면~~

admin 패널 houses를 얻는다

근데 들어가면~

요따구로 에러 존재

models안에 class를 생성했지만, 데이터베이스는 이 class에 대해 모르는 상태이기 때문임

그래서 두번째 터미널에 python manage.py makemigrations 입력하면

장고가 houses/migrations 라는 폴더 내부에 파일을 만듦

이 migrations를 적용시키면 데이터베이스 된다

다시 한번 두번째 터미널 콘솔창에

python manage.py migrate입력

→ 데이터베이스 모양 업데이트

!!!앞으로도 models에서 뭔가 수정하면 위와 같은 방식으로 데이터베이스에게 알려줘야함(makemigration,migrate)

짜라좐~ 이런식으로 생김

#4.2 Recap

  • settings에서 custom_apps를 추가해서 housesconfig추가, system_apps추가해서 기존 installed_Apps랑 똑같이하고
  • Installed_apps = system_apps + custom_apps로 두기

  • 우리가 models에 정의해서 좋은 점
    • 장고가 데이터베이스와 소통해줌(데이터 형태를 데이터베이스에 설명해줌(SQL))
    • admin.py가서 model을 등록 시키기만 해도 admin패널을 통째로 만들어줌
  • 우리가 models에서 price의 이름을 price_per_night으로 바꾸고 다시 makemigration을 하면 자동으로 이름바꿀거냐고 물어봄 , y라고 하면 migration안에 002라는 새로운 파일 생성함
  • 이런식으로 어떻게 바꿨는지도 보임
  • 그리고 다시 migrate

#4.3 Admin

  • 이렇게 보이는게 뻐킹이래
  • house class의 string method형태를 설정하면 돼
  • models.py로 가서 class안에
def __str__(self):
        return self.name

추가해주면

바로 이렇게 보임!

  1. 정렬기능
  • 그럼이제 house admin 패널에도 column을 구현해보자!
  • column별로 정렬도 가능
  • admin 에서 list_display 추가해주면돼
from django.contrib import admin
from .models import House

@admin.register(House) # 이 밑의 class가 House 모델을 통제함
class HouseAdmin(admin.ModelAdmin): # 1) HouseAdmin이라는 class를 만들고, 2) ModelAdmin으로부터 모든걸 상속받음
    list_display = [
        "name",
        "price_per_night",
        "address",
        "pets_allowed"
    ]
  • 하고 다시 makemigrations, migrate해줘
  • 그럼 column별로 정렬 기능 생겼다!!!

  1. 필터링 기능
  • 근데 여기서 필터링 기능을 추가 하고 싶음
from django.contrib import admin
from .models import House

@admin.register(House) # 이 밑의 class가 House 모델을 통제함
class HouseAdmin(admin.ModelAdmin): # 1) HouseAdmin이라는 class를 만들고, 2) ModelAdmin으로부터 모든걸 상속받음
    list_display = [
        "name",
        "price_per_night",
        "address",
        "pets_allowed"
    ]

    list_filter = [
        "price_per_night",
        "pets_allowed"
    ]
  • admin.py에 list_filter추가하면 돼

  1. 검색 기능
from django.contrib import admin
from .models import House

@admin.register(House) # 이 밑의 class가 House 모델을 통제함
class HouseAdmin(admin.ModelAdmin): # 1) HouseAdmin이라는 class를 만들고, 2) ModelAdmin으로부터 모든걸 상속받음
    list_display = [
        "name",
        "price_per_night",
        "address",
        "pets_allowed"
    ]

    list_filter = [
        "price_per_night",
        "pets_allowed"
    ]

    search_fields = ["address"]
  • admin에 search_fields 추가
  • “address__startswith”과 같이 작성해서 추가적인 조건도 설정 가능

  1. 에러 메세지 기능
  • admin안에서 잘못 입력하면 빨간 메세지로 터미널에 에러 뜸 이거 읽으면 힌트 있으니까 해결 가능

  • 부가 적으로 장고는 list잘 안 쓰고 tuple 씀
  • 근데 tuple안에 원소가 하나면 vscode에서 string으로 인식하기 때문에
  • 이런 식으로 뒤에 콤마 붙이기

#4.4 Documentation

  • 장고 공식 도움말이 엄청 유용함