-
django 입문(5) Model 1) 기본 사용법Backend/Django 2023. 7. 10. 22:50
Model
데이터베이스 처리를 하기 위해 사용되는 개념. 쿼리문 대신 데이터를 처리할 수 있게 해줌.
장고는 ORM을 사용한다.
ORM: Object Relational Mapping. DB의 테이블을 모델화(=객체화)하여 사용하는 방식. DB 종류를 변경하는데 수월함. (쿼리문이 아닌 모델 객체를 사용하기 때문에 - 쿼리문은 개발자마다 그 내용이 다를 수 있어 통일성 확보가 어려움. MySQL과 오라클 간 호환에도 쿼리문 차이가 발생하여 번거로움.)
{app}/models.py
models.py 에 구현되는 클래스(=모델)는 django.db의 models.Model을 상속 받아야만 한다. 왜냐하면 models.Model에 ORM을 사용할 수 있는 기능들이 구현되어 있기 때문이다.
from django.db import models # Create your models here. class Question(models.Model): subject = models.CharField(max_length=200) content = models.TextField() create_date = models.DateTimeField() def __str__(self): return self.subject class Answer(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) content = models.TextField() create_date = models.DateTimeField()
모델의 멤버 변수(=필드)가 취할 수 있는 Type. = DB Table을 구성하는 Column 의 Value Type
Type을 정하면서 각 Column의 제약도 함께 결정할 수 있다.
- models.CharField(max_length=INT)
- models.TextField()
- models.DataTimeField()
- models.ForeignKey(<model Class>, on_delete=models.CASCADE): 다른 모델과 연결할 때 사용. on_delete는 연결된 Model 삭제 시 함께 삭제할지 여부. ForeignKey로 다른 모델과 연결되었다는 의미는 현재 모델이 그 모델에 종속된다는 의미이다.
- 기타 참고: https://docs.djangoproject.com/en/4.0/ref/models/fields/#field-types
- __str()__: 매직메서드를 오버라이드하여 해당 모델 객체를 출력해야 할 상황에 표시될 문자열을 미리 정의하면 나중에 모델 관리나 동작 확인에 용이하다.(Tip)
위 내용을 활용하여 만든 Model을 테이블로 생성하려면 config/settings.py - INSTALLED_APPS 에 자신이 사용할 app을 추가해야 한다.
INSTALLED_APPS = [ 'pybo.apps.PyboConfig', ....
직접 만든 앱(pybo)/apps.py 에 PyboConfig 클래스가 자동으로 생성되어져 있다. (앱 생성 시 자동으로 생성 됨.) 특별한 경우가 아니라면 PyboConfig 클래스를 수정할 일은 없다. → ‘{app_name}.apps.{app_name_title}Config’대신 ‘{app_name}’ 만 입력하여도 동작하는 듯→ (?) 아직 원리 파악 다 못함…
모델은 DB에 테이블로 저장될 때 {app_name}_{model_name(소문자)} 의 형식으로 저장된다. 이 규칙은 옵션 설정을 통해 바꿀 수 있다.
생성된 모델은 장고 셸에서 수동으로 추가/조회/수정/삭제 가 가능하다.
장고 셸 실행: `python manage.py shell` → Question Object 생성 → Question.save()
`{class_name}.objects.all()`: DB에서 <Classname>객체로 생성된 데이터를 조회하는 함수.(이 때 class_name은 모델 클래스를 의미함.) 결과 값으로 출력 되는 값은 QuerySet 객체.
ex) python manage.py shell 입력으로 장고 셸 실행
>>> from <appname>.models import Question # Question은 models.Model을 상속받는 Class >>> Question.objects.all() <QuerySet [<Question: Question object (1)>, <Question: Question object (2)>, <Question: Question object (3)>]>
참고자료
점프 투 장고
**점프 투 장고 종이 책 출간 !! (2020.12)** * [책 구입 안내](https://wikidocs.net/105844) 점프 투 장고는 파이보라는 …
wikidocs.net
배프의 오지랖 파이썬 웹프로그래밍: https://www.yes24.com/Product/Goods/69758579
배프의 오지랖 파이썬 웹프로그래밍 - 예스24
기초부터 실전 웹 서비스까지 다 담았다!현직 개발자이자 IT강사인 배프의 강의와 실무를 통해 쌓은 노하우를 한 단계식 알려드립니다. 현 웹 프로그래밍 시장은 다양한 기술을 활용하여 얼마나
www.yes24.com
'Backend > Django' 카테고리의 다른 글
django 입문 (7) 템플릿 파일 (0) 2023.08.02 django 입문(6) 장고관리자 admin (1) 2023.07.12 django 입문(4) CRUD 기본 작업 (1) 2023.07.07 django 입문(3) Routing (0) 2023.07.03 django 입문(2) 앱 생성 ~ Routing(URL 관리) (0) 2023.05.29