장고 블로그를 만들면서 생기는 객체는 게시글 타이틀, text와 같은 내용이 되겠습니다.

이러한 객체들을 데이터베이스와 연결하고 저장 및 생성하는 과정을 살펴보도록 하겠습니다.

 

% cd sw_python

우선 이전과 같이 실습 파일들이 있는 최상위 폴더로 들어가서

% conda activate django_venv

만들었던 가상 환경을 실행시킵니다.

% python manage.py shell

가상 환경에서 "장고 쉘(shell)"을 실행합니다.

파이썬의 모든 명령어를 수행할 수 있는 장고 쉘이 동작하고 있습니다. (Interactive Console)

 

한번 객체를 불러볼까요?

우선 객체를 호출하기 위해 import를 해줍니다.

>>> from blog.models import Post

blog >(하위) models(.py)에서 Post 객체(class)를 Import 합니다.

 

*models.py

 

>>> Post.objects.all()

Post의 모든 객체를 호출합니다.

이전에 포스팅했던 두 게시글 타이틀을 볼 수 있습니다.

지금까지의 동작은 장고 DB에 저장되어 있는 Post 객체 2개를 가져온 것입니다.

 

기존에 DB에 있는 객체를 가져오는 것이 가능하다면 생성도 가능해야겠죠?

 

이번에는 간단히 객체를 생성해보겠습니다.

 

>>> from django.contrib.auth.models import User

우선 필요한 모델을 Import합니다.

>>> User.objects.all()

User 객체를 모두 가져옵니다.

<QuerySet [<User: swsong>]>

관리자 계정명이 호출되네요. 

 

>>> me = User.objects.get(username='swsong')

관리자 인스턴스를 가져옵니다.

me라는 이름으로 관리자가 할 수 있는 일들을 수행하기 위함입니다.(posting)

>>> Post.objects.create(author=me, title='Sample title', text='Test')

글을 생성합니다. (관리자가 작성하고, 타이틀은 'Sample title', 내용은 'Test'라 작성합니다.)

>>> Post.objects.all()

객체를 가져와보니 <Post: Sample title>이 추가된 것을 볼 수 있습니다.

 

같은 방식으로 Sample title2, Sample title3을 저장해봅니다.

>>> Post.objects.filter(author=me)

filter를 해주면 () 안의 내용을 토대로 객체가 걸러집니다. 모든 포스팅이 swsong이라는 관리자 계정으로 진행되었기 때문에 위에서 QuerySet으로 모든 포스팅을 볼 수 있습니다.

>>> Post.objects.filter(title__contains='title')

글 타이틀 중 'title'이라는 글자를 포함하는 Post를 뽑아봅니다. <Post: First Django>, <Post: second posting>은 예상대로 보이지 않습니다.

 

 

여기까지 간단히 객체 저장과 호출을 통해 장고 데이터베이스 - 객체 매핑을 해보습니다.

 

하지만 이렇게 데이터베이스에 코드로 새롭게 추가해준 Post들은 실제로 포스팅까지 이루어진 것이 아니라, 정확히 DB에만 저장된 것으로, 글을 올리는 것은 추가로 publish 메서드를 통해 수행해줘야 합니다.

 

다음 시간에 이 내용을 더 상세히 코드와 함께 알아보도록 하겠습니다.

 

 

 

+ Recent posts