새소식

python/Django

Django - mysite (앱 등록, 모델 사용, 테이블 사용 등)

  • -

링크

이 페이지의 내용 정리 위캔입니다.

장고 셸 시작 방법

python manage.py shell

장고 셸 종료 방법

  • Ctrl + z
  • quit() 입력

모델 작성

  • pybo/models.py 에 정의
from django.db import models

class Question(models.Model):
    subject = models.CharField(max_length = 200) # 제목은 최대 200글자만 가능하도록 설정
    content = models.TextField() # 글자제한이 없는 텍스트는 TextField(), 제한이 있는 텍스트는 CharField(제한수)
    create_date = models.DateTimeField() # 날짜와 시간에 관계된 속성은 DateTimeField()

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE) # ForeignKey는 다른 모델과 연결하기 위해 사용한다.
    # on_delete = models.CASCADE 는 연결된 모델이 삭제될 경우 같이 삭제 된다는 의미이다.
    content = models.TextField
    creat_date = models.DateTimeField()

pybo 앱 등록

  • config/settings.py파일의 INSTALLED_APPS 항목에 추가
INSTALLED_APPS = [
'pybo.apps.PyboConfig',
]
  • INSTALLED_APPS에 추가한 pybo.apps.PyboConfig 클래스는 pybo/apps.py 파일에 있는 클래스이다. 이 파일은 pybo 앱 생성시 자동으로 만들어지는 파일로 따로 만들 필요가 없다. 이미 pybo/apps.py 파일 안에 다음과 같은 클래스가 구현되어 있을 것이다.

makemigrations

python manage.py makemigrations

  • 명령어를 실행하더라도 실제로 테이블이 생성되지는 않는다. makemigrations 명령은 장고가 테이블 작업을 수행하기 위한 작업파일을 생성하는 명령어다. 실제 테이블 생성은 migrate 명령을 통해서만 가능하다.

sqlmigrate

python manage.py sqlmigrate pybo 0001

  • sqlmigrate 명령은 단지 실행되는 쿼리만 조회할 뿐이다. 실제 쿼리가 수행되지는 않는다.

migrate

python manage.py migrate

  • 실제 테이블 생성

모델 사용

import

from pybo.models import Question, Answer

Question 생성

from django.utils import timezone
q = Qustion(subject = '제목', content = '내용', create_date=timezone.now() // 현재 시간) q.save()
q.save()

  • 반드시 저장을 해야한다.
  • 데이터 1건 생성되면 반드시 다음처럼 id값이 생성된다.
    • q.id (q의 id를 확인하는 명령어)
    • 결과 : 1

      Question 조회

Question.objects.all()

  • 결과 : <QuerySet [<Question: Question object (1)>]>

    Question 조회 시 id값이 아닌 제목을 표시하도록 하는 메소드 추가

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

    # 추가
    def __str__(self):
        return self.subject

filter를 사용하여 조회

Question.objects.filter(id=1)

  • id가 1인 Question 데이터를 조회하는 명령어

get을 사용하여 조회

Question.objects.get(id=1)

  • get은 1건의 데이터를 조회할 때 사용한다.
  • get과 filter의 차이는 get은 한 건만을 리턴하고 filter는 여러 건을 리턴한다

문자열이 포함된 데이터 조회

Question.object.filter(subject__contains='장고')

  • subject에 '장고'가 포함된 데이터를 리턴한다.
  • 언더바(_)가 2개이다.

Question 수정

q = Question.objects.get(id = 2)

  • 반드시 get을 사용해야 한다.
    q.subject = 'Django Model Question
  • 위에서 선택한 object의 subject를 'Django Model Question'으로 변경한다.
    q.save()
  • 저장까지 마쳐야 적용된다.

Question 삭제

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

  • 위 코드를 실행하면 해당 데이터가 삭제되고 (1, {'pybo.Question': 1})라는 정보가 리턴된다.
  • 리턴된 정보는 Question 모델이 1개 삭제되었음을 의미한다.
  • 앞의 숫자는 삭제된 데이터 갯수를 의미
  • 뒤의 숫자는 모델별 삭제된 숫자를 의미

Answer 작성

q = Question.objects.get(id = 2)
from django.utils import timezone
a = Answer(question = q, content = '나도 잘 모르겠어요.', create_date = timezone.now())
a.save()

Answer 조회

  • Question과 동일한 방식으로 진행할 수 있다.

Answer를 이용해 Question 조회하기

a.question

Question을 이용해 Answer 조회하기

q.answer_set.all()

  • 질문 하나에 여러 개의 답변이 가능하므로 _set.all()을 이용한다.
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.