AngelPlayer`s Diary

모델

장고가 데이터를 관리하는데 사용

SQL문을 사용하지 않고도 데이터를 관리할 수 있음

 

 

 

migrate로 필요 테이블 생성

admin, auth, session 등에 필요한 테이블을 자동으로 생성

python manage.py migrate

 

 

 

모델 만들기

from django.db improt models

class 모델명1(models.Model):
	속성1 = models.CharField(max_length=100)
    속성2 = models.TextField()
    속성3 = models.DateTimeField()
    ...
    
class 모델명2(models.Model):
	...

 

 

 

일대일, 일대다, 다대다 설명 (ForeginKey, etc..)

https://nachwon.github.io/django-relationship/

 

 

 

앱 등록하기

config.settings.py에 앱을 등록해야 DB 작업을 할 수 있다.

# config/settings.py
...
INSTALLED_APPS = [
	...
    '앱.apps.PyboConfig'
    ...
]
...
# 앱/apps.py
from django.apps import AppConfig

class PyboConfig(AppConfig):
    name = '앱이름'

 

 

 

 

테이블 생성

model을 가지고 실제 테이블을 생성하여 사용함

model이 추가되거나 모델의 속성이 추가되면 반드시 작업을 수행해야함

이때 테이블 생성 명령은 migrate임 (makemigration은 수행 파일 생성 명령)

// 가상 환경 활성화 상태
// 1. makermigration 명령으로 테이블 작업 수행을 위한 파일 생성
>>> python manage.py makemigrations

// 2. migrate 명령으로 테이블 생성
>>> python manage.py migrate

 

-> 실제 테이블명은 장고가 지어주기 때문에 모델명과 다를 수 있음 (ex. 앱명_모델명)

-> 사용 시 기존에 작성한 모델명으로 사용하면 되기 때문에 문제되지 않음

 

 

 

장고 쉘 실행하기

// 장고 쉘 실행
>>> python manage.py shell

// 모델 import 하기
>>> from 앱.models import 속성1, 속성2, ..
>>> 그밖에 필요한 기능 import
...

 

 

 

데이터 입력

// 변수에 저장할 데이터를 삽입
>>> 변수 = 모델(속성1=' ', 속성2=' ', ...)

// 변수의 데이터를 DB에 저장
>>> 변수.save()

 

-> 장고는 데이터 생성 시 데이터의 id 값을 자동 생성해줌

 

 

DB의 데이터 확인 방법

1) 모델명.objects.all() - 전체 데이터 확인

// 모델이 가진 모든 데이터를 보여줌
>>> 모델명.objects.all()

 

이때 기본 설정은 데이터 유형을 출력하기 때문에 파이썬 model.py의 모델에 메소드를 추가하여 원하는 출력 결과로 수정

-> 속성이 변한 것이 아니므로 migrate 할 필요 없음

// 메소드 추가
class 모델(model.Model):
	def __str__(self):
    	return self.subject
        ...

 

 

2) 모델명.objects.filter() - 조건에 맞는 여러 데이터 반환

filter는 하나 이상의 데이터를 반환함 - 반환값이 QuerySet

// 조건에 맞는 데이터 조회 시, 조건에 맞는 모든 데이터 반환
>>> 모델명.objects.filter(id=1)

// 조건에 맞지 않는(없는) 데이터 조회 시 빈 QuerySet 반환함
>>> 모델명.objects.filter(id=999)

 

 

3) 모델명.objects.get() - 조건에 맞는 하나의 데이터 반환

조건에 맞는 데이터가 없는 경우 에러 발생

// 조건에 맞는 데이터 반환
>>> 모델명.objects.get(id=1)

// 조건에 맞지 않는(없는) 데이터 조회 시, 에러 발생
>>> 모델명.objects.get(id=999)

 

 

4) 특정 문자열이 포함된 데이터 조회 방법

// 특정 속성에서 특정 문자열을 포함한 데이터 검색
>>> 모델명.objects.filter(속성__contains='문자열')

 

 

 

데이터 수정하기

// 수정할 데이터를 조회하여 변수에 저장
// ex. 변수.objects.get(id=1)

>>> 변수.변경할속성 = '변경 내용'
>>> 변수.save()

 

 

 

데이터 삭제하기

// 수정할 데이터를 조회하여 변수에 저장
// ex. 변수.objects.get(id=1)

>>> 변수.delete()

 

 

 

연결 모델 데이터 생성하기

// 변수1 = 기존 데이터, 변수2 = 변수1에 연결된 데이터
>>> 변수1 = 모델1.objects...

// ForeignKey 속성에 변수 1을 삽입
>>> 변수2 = 모델2(ForeignKey속성=변수1, 속성2=' ', ...)
>>> 변수2.save()

 

 

 

연결된 데이터 조회하기

QuerySet으로 반환

// 모델1의 데이터에 연결된 모델2의 데이터를 조회
>>> 변수1.모델2_set.all()

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band