python/Django

[Django] 4. 장고 셸을 이용해 데이터 만들기

끼발자 2021. 12. 21. 15:13
반응형

이전 포스팅에서 pybo 모델을 만들었다면, 이젠 데이터를 넣어줄 시간이다.

 

장고 프로젝트 디렉터리에서

 

python manage.py shell

 

을 입력하면 장고 셸이 실행된다.

 

from pybo.models import Question, Answer
from django.utils import timezone

파이썬과 비슷하지만 조금 다른 장고셸이다.

 

위와같이 임포트해주고, 

 

q = Question(subject = '', content = '', create_date = timezone.now())
q.save()

제목과 내용은 입맛에 따라 입력해주고, 저장해주면 데이터베이스에 저장된다.

 

q.id를 입력하면 자동으로 생성되는 q의 primary key가 출력된다.

 

위와같은 방식으로 2~3개정도의 데이터를 생성해보자.

 

데이터를 생성했다.

 

그러면 이 데이터들은 어떻게 조회할까?

 

Question.objects.all()

이렇게 모든 데이터를 볼 수 있다.

 

하지만 [<Question: Question object (1)> .....] 이렇게 표시되는게 불편하다.

 

그럴땐 Question 모델의 기능을 변경해주자.

 

class Question(models.Model):
    subject = models.CharField(max_length=200) # 글자 수 제한하려면 charField
    content = models.TextField() # 글자수 제한 X
    create_date = models.DateTimeField() # 시간

    def __str__(self): # Question.objects.all에 보기 편한 format
        return self.subject

 

모든 데이터 조회가 아니라 특정 데이터 조회가 필요하다면,

 

Question.object.filter(id = 1) # 리스트가 반환됨
#or
Question.object.get(id = 1) # 1개의 데이터만 반환됨.

## 특정 조건 조회
Question.object.filter(subject__contains = 'django')

 

이렇게 조회가 가능하며, 다른 변수에 할당한 다음 

 

q.subject = 'modify text' 와 같은 명령어로 변경도 가능하며,

 

q.delete를 이용하여 삭제도 가능하다.

 

질문을 만들었으니, 이제 답변도 등록해보자.

 

q = Question.object.get(id=1) # id=1을 삭제했다면 다른 id로

a = Answer(question = q, content = 'answer', create_date = timezone.now())
a.save()

이렇게 답변도 등록이 가능하다.

 

답변은 질문을 참조하고있기 때문에, question = q로 참조하는 질문을 연결해준다.

 

또한,

 

a.question # 답변과 연결된 질문

q.answer_set.all() # 질문과 연결된 답변

 

이렇게 연결된 데이터들도 조회가 가능하다.

반응형

'python > Django' 카테고리의 다른 글

[Django] 6. 장고 템플릿 구현  (0) 2021.12.22
[Django] 5. 장고 Admin 활용  (0) 2021.12.22
[Django] 3. 모델 적용  (0) 2021.12.21
[Django] 2. 서비스 생성  (0) 2021.12.21
[Django] 1. 장고 시작  (0) 2021.12.21