Django Basics - Models and Admin

진성·2022년 9월 29일
0

Django해보장고

목록 보기
3/6
post-thumbnail

1. Django의 Models

  1. 공식 문서를 함께 보면서 공부한다. Models는 Relational DB의 Relation과 유사하게 쓰이는 Django의 Table 단위라고 생각하면 되는 것 같다. Python 기반인 만큼, Class로 정의되어 안에 Data field와 메서드를 선언해서 사용한다.

  2. App을 생성하면 자동적으로 만들어지는 '<앱이름>.apps.<앱이름>Config'를 프로젝트의 config/settings.py, INSTALLED_APPS에 추가해주면, 프로젝트 단위로 Models의 변경사항을 Update 할 수 있게 된다.

  3. Models는 해당 앱의 models.py 안에 django.db.models.Model을 상속받아 작성해두면 된다. 해당 모델을 DB Schema에 추가하고 관리하기 위해서는 Migration이 필요하다.

  4. Migration을 통해 Models의 변경사항을 적용한다. python manage.py shell 을 통해서 Django Shell을 열고, python manage.py makemigrations로 모델의 변경 사항 파일 만들기를, python manage.py migrate로 migration을 apply를 하게 된다. 일종의 version control인 것이다. sqlmigrate를 사용하면 Create Table과 같은 SQL Query문을 확인할 수 있다.

  5. 이러한 모델화의 장점은, 프로그래머의 실력에 따라 성능과 효율이 왔다갔다하는 SQL Query문과는 다르게(Unique한 Goal에 대해 Unique하지 않은 다양한 Instruction들이 만들어질 수 있다.), 메서드를 사용해서 효율성을 보장한 채로 DB 작업을 할 수 있다는 것이다. 또한 유지보수가 간단하다는 점도 강점. 이렇게 Model을 사용해 DB와 연동하는 것을 Object Relational Mapping이라고 한다.

  6. Model이 결국 Class인 만큼, instance 만들듯 사용하면 된다. m = Model(field=val). 이렇게 하고난 후 Save를 해줘야 반영이 된다. m.save(). 또한 id도 자연스럽게 주어진다.

  7. Model의 데이터 조회는 Model.objects를 통해서 할 수 있다. .all()을 통해 전체 조회도 가능하고, 조건부 검색도 가능하다. 하나의 결과에 대해서는 first = m.get(id=1) 식으로, 여러 개의 검색결과를 갖는 다양한 조건에 대해서는 text = m.filter(attribute__contains="str") .

  8. Model 내부 데이터 수정은 그냥 위 방법대로 불러와서 하면 된다. 하고 나면 model.save()를 통해서 수정 사항을 저장할 수 있다. delete도 가능하다.

  9. 한 Model이 다른 Model을 Foreign Key로 사용하는 경우, Foreign-key로 사용되는 Model이 해당 Model에 역방향 접근을 하기가 일반적으로는 어렵다. Django는 <model.set>을 통해 이러한 역방향 접근을 간단히 할 수 있도록 하였다.

2. Django의 Admin

  1. python manage.py createsuperuser로 생성 가능, Localhost/admin을 통해 관리자 페이지를 만들 수 있다.

  2. 모델을 Admin을 통해서 관리하려면, 위 경로로 가서 로그인 한 뒤, 관리하고자 하는 Model이 있는 APP의 디렉토리로 가서 admin.py를 수정해준다.

from django.contrib import admin
from .models import Question

admin.site.register(Question)
  1. 위 대로 register를 하면, 해당 Model을 Web GUI를 통해 Modify할 수 있게 된다.

  2. 다양한 사용법은 여기에 나와있다.

  3. Commit, Push하고 마무리! 일이 많아서 피곤하다...

profile
어려운 건 꾸준히, 재밌는 건 빠르게

0개의 댓글