[django] 점프 투 장고 - 장고 기초 2

Joy·2020년 6월 16일
0

Django | 점프투장고

목록 보기
4/22

MODEL

모델(Model)을 이용하여 데이터베이스를 처리 - SQL 쿼리문의 도움없이 데이터를 쉽게 처리 가능

장고 앱 migrate

migrate 명령을 실행하여 해당 앱들이 필요로 하는 테이블들을 생성

(mysite) C:\projects\mysite>python manage.py migrate

모델 작성

질문과 답변을 할 수 있는 파이썬 게시판(Python Board) 서비스 -> 질문과 답변에 해당하는 데이터 모델필요

모델 속성

Question 모델 : subject, contetn create_date

Answer 모델 : question, content, create_date

models.py 에 모델 정의

[C:\projects\mysite\pybo\models.py]

from django.db import models

class Question(models.Nodel):
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField()

class Answer (models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    content = models.TextField()
    create_date = models.DateTimeField()

각각의 class 모델에 맞는 속성 Field 을 갖도록 작성.

CharField : 길이 제한 텍스트
TextField : 글자수 제한 없는 텍스트
DataTimeField : 날짜 시간 속성
ForeignKey : 기존모델 속성으로 가져갈 때. 다른 모델 연결 (Q 모델을 속성으로 가져와야함)
on_delete=models.CASCADE : 연결된 Q가 삭제되면 A도 삭제.


파이보 앱 등록

모델 이용해서 테이블 생성

  • pybo앱을 config/settings.py 파일의 INSTALLED_APPS 항목에 추가
    pybo.apps.PyboConfig 클래스는 pybo/apps.py 파일에 있는 클래스

모델 생성

python manage.py makemigrations
python manage.py migrate

mirgate 명령 수행
모델이 변경되면 makemigrations 명령을 먼저 수행한 후에 migrate 명령을 수행


모델 사용

장고 쉘 이용해서 모델 사용법 알아보기

장고 쉘 실행

(mysite) c:\projects\mysite>python manage.py shell

장고쉘에서 모델 임포트

from pybo.models import Question, Answer

Q 생성

Q 모델 이용해서 데이터 만들기

>>> from django.utils import timezone
>>> q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
>>> q.save()

q.id 로 id값(Primary Key; PK) 확인 가능.
같은 방식으로 2번째 질문 생성 가능. id는 하나씩 추가됨.

Q 조회

저장된 데이터 조회하기

모델명.objects : 결과값으로는 QuerySet객체가 리턴 - id 값으로
Question.objects.all() : Question에 저장된 모든 데이터를 조회
Question.objects.filter(id=1) : 특정 조건에 맞는 데이터 모두 조회.
Question.objects.get(id=1) : 특정 데이터 1건만 조회

__str__ 메서드를 모델에 추가하면 id 대신 제목 표시 가능

# [C:\projects\mysite\pybo\models.py]
def __str__(self):
        return self.subject

장고 쉘 재시작

quit()

모델에 메서드 추가되면 쉘 재시작 해야 변경 결과 확인 가능.
재시작 시 Q모델 다시 import 해야함.

Q 수정

  1. 데이터 조회하기 (get) 변수에 저장.
  2. 속성 재 정의 하기
  3. save()
# 결과
>>> q = Question.objects.get(id=2)
>>> q
<Question: 장고 모델 질문입니다.>
>>> q.subject = 'Django Model Q'
>>> q.save()
>>> q
<Question: Django Model Q>

Q 삭제

delete()

>>> q = Question.objects.get(id=1)
>>> q.delete()

A 생성 & 조회

  1. 필요 메서드 임포트하기

  2. Q 조회 후 속성에 대입

  3. A 작성.

  4. save()

  5. get(id= ) 로 조회

  6. A객체 a를 사용하면 연결된 q도 조회가능 a.question

  7. q.answer_set.all() 사용하면 질문의 모든 A 가져오기 가능

profile
roundy

1개의 댓글

comment-user-thumbnail
2021년 1월 21일

q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now()) 이걸 입력하면

Traceback (most recent call last):
File "", line 1, in
NameError: name 'timezone' is not defined

이렇게 나오는데 어떻게 해결하죠.....

답글 달기