[Django] 데이터를 관리하는 모델

유포도·2022년 9월 29일
0

Django

목록 보기
2/4

장고는 모델로 데이터를 관리한다. 보통 웹개발에서는 SQL 쿼리문을 이용한다. 그러나 모델을 사용하면 SQL쿼리문을 몰라도 데이터를 저장/조회 할 수 있다.

장고에는 ORM(Oriented-Relational_Mapping)이라는 기능이 있다. ORM은 파이썬으로 데이터 작업을 할 수 있게 해주는 기능이다. 그러므로 장고에서는 쿼리문을 몰라도 파이썬을 안다면 데이터를 다룰 수 있다.

pybo/models.py 에 모델 작성하기

대부분의 모델은 클래스로 만든다.

class Question(models.Model):
    subject = models.CharField(max_length=200) #Charfield: 글자수를 제한하고 싶을떄/ 최대 200자까지 입력가능
    content = models.TextField() #글자수 제한이 없는 데이터
    create_date = models.DateTimeField() #날짜, 시간 관련 속성

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE) #Question모델을 속성으로 가짐
    content = models.TextField()
    create_date = models.DateTimeField()

config/settings.py 를 열어 pybo 앱 등록하기

만든 모델을 이용하여 테이블을 생성하자. 테이블을 생성하려면 config/settings.py 에 INSTALLED_APPS 항목에 pybo앱을 추가해야한다.

INSTALLED_APPS = [
    'pybo.apps.PyboConfig',
    ...
    생략
]

장고는 모델을 이용하여 데이터베이스의 실체가 될 테이블을 만드는데, 모델은 앱에 종속되어 있으므로 반드시 장고에 앱을 등록해야 테이블 작업을 진행할 수 있다.

migrate로 테이블 생성하기

makemigrations 명령을 실행후 migrate 명령

장고 셸을 사용하여 모델 사용하기

python3 manage.py shell #장고 셸 실행
>>> from pybo.models import Question, Answer
>>> from django.utils import timezone
>>> q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
>>> q.save()
>>> q.id
1
>>> q = Question(subject='장고 모델 질문입니다.', content='id는 자동으로 생성되나요?', create_date=timezone.now())
>>> q.save()
>>> q.id
2
>>> Question.objects.all() #Question모델 데이터 모두 조회
<QuerySet [<Question: Question object (1)>, <Question: Question object (2)>]>

Question 모델에 str 메서드를 추가하면 id가 아닌 속성값 출력

    def __str__(self):
        return self.subject

데이터 조회하기

>>> Question.objects.filter(id=1)
<QuerySet [<Question: pybo가 무엇인가요?>]>
>>> Question.objects.get(id=1)
<Question: pybo가 무엇인가요?>
>>> Question.objects.filter(subject__contains='장고')
<QuerySet [<Question: 장고 모델 질문입니다.>]>

데이터 수정하기

>>> q=Question.objects.get(id=2)
>>> q
<Question: 장고 모델 질문입니다.>
>>> q.subject='Django Model Question'
>>> q.save()
>>> q
<Question: Django Model Question>

반드시 save 함수를 실행해야 변경된 데이터가 데이터베이스에 반영된다.

데이터 삭제하기

>>> q=Question.objects.get(id=1)
>>> q.delete()
(1, {'pybo.Question': 1}) #앞의 1은 삭제된 데이터의 id, 뒤의 부분은 삭제된 모델 데이터의 개수
>>> Question.objects.all()
<QuerySet [<Question: Django Model Question>]>

delete함수가 실행되면 즉시 데이터가 삭제되며, 삭제된 데이터의 추가 정보가 반환된다.

답변 모델 데이터 추가하기

>>> from django.utils import timezone
>>> a = Answer(question=q, content='네 자동으로 실행됩니다.', create_date=timezone.now())
>>> a.save()
>>> a.id
1
>>> a=Answer.objects.get(id=1)
>>> a
<Answer: Answer object (1)>
>>> a.question
<Question: Django Model Question>
>>> q.answer_set.all()
<QuerySet [<Answer: Answer object (1)>]>
profile
클라우드 학원 다니는즁,,,

0개의 댓글