일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 우아한테크
- 예외
- 배열 3요소
- 함수 선언
- 생성자
- DoitSQL입문
- 숫자 형식
- 자바 오류
- 키-값 데이터베이스
- DoIt
- 숫자형식오류
- Doit입문SQL
- SQL입문
- 크롤링 오류
- 자바
- dbms
- R1C3
- DoitSQL
- 함수
- HTML역사
- 자바 예외
- 페이지분석
- SQL
- 예제
- 웹 브라우저 전쟁
- 크롤링
- 배열 예제
- html
- 데이터베이스
- 웹브라우저 수용도
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 우아한테크
- 예외
- 배열 3요소
- 함수 선언
- 생성자
- DoitSQL입문
- 숫자 형식
- 자바 오류
- 키-값 데이터베이스
- DoIt
- 숫자형식오류
- Doit입문SQL
- SQL입문
- 크롤링 오류
- 자바
- dbms
- R1C3
- DoitSQL
- 함수
- HTML역사
- 자바 예외
- 페이지분석
- SQL
- 예제
- 웹 브라우저 전쟁
- 크롤링
- 배열 예제
- html
- 데이터베이스
- 웹브라우저 수용도
- Today
- Total
프로그래밍
[Django] 장고 Model 사용(생성, 조회, 수정, 삭제, 작성) 본문
2023.11.27.월
장고 Model 사용
본격적으로 장고 Model을 활용하여 DB를 다루어보자
장고에서 기본적인 데이터베이스 관련 설정은 위와 같으며 settings.py 에 위치한다
모델 작성
다음과 같은 형식의 모델을 작성해보자
[Question]
속성 | 설명 |
subject | 질문의 제목 |
content | 질문의 내용 |
create_date | 질문을 작성한 일시 |
[Answer]
속성 | 설명 |
question | 질문(어떤 질문의 답변인지) |
content | 답변의 내용 |
create_date | 답변을 작성한 일시 |
models.py
from django.db import models
class Question(models.Model):
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()
테이블 생성
먼저 해당 앱을 settings.py에 추가하여 파일의 INSTALLED_APPS 항목에 추가한다
'app01' 어플리케이션의 apps.py에 App01Config 클래스로 구현되어 있는데
해당 name을 작성하면 된다
python manage.py makemigrations
python manage.py migrate
:: migrate 명령을 실행하기 전에 실제 어떤 쿼리문이 실행되는지 확인 가능
python manage.py sqlmigrate app01 0001
마이그레이션 생성 및 적용하면 테이블이 생성된다
모델 사용
Question 생성
모델 사용을 장고 Shell을 활용하여 해보자
:: 장고 shell 실행
python manage.py shell
>>> from app01.models import Question, Answer
Question, Answer 모델 import
>>> from django.utils import timezone
>>> q = Question(subject='pybo가 무엇인가요?', content='pybo에 대해서 알고 싶습니다.', create_date=timezone.now())
>>> q.save()
질문 데이터 입력
>>> q.id
1
질문 데이터 1건인 것을 볼 수 있다
Question 조회
모델 사용을 장고 Shell을 활용하여 해보자
>>> Question.objects.all()
Question 모델 데이터의 모든 데이터 조회
결과값으로는 QuerySet 객체가 리턴되는데 위처럼 Question 객체를 포함하고 있다
Question object (1), Question object (2) 에서 1과 2는 Question 데이터의 id 값이다
다음처럼 Question 모델에 __str__ 메서드를 추가하면 id 값 대신 제목을 표시할 수 있다
app01.models.py
from django.db import models
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
def __str__(self):
return self.subject
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
>>> Question.objects.filter(id=1)
>>> Question.objects.get(id=1)
fillter를 사용하면 조건에 해당하는 데이터를 모두 리턴해준다
따라서 다건을 의미하는 QuerySet이 리턴된다
get을 활용한 조회일 경우에는 QuerySet이 아닌 Question 모델 객체가 리턴된다
get은 한건만 리턴된다
get 조회시 조건에 맞는 데이터가 없을시 오류가 발생한다
더 다양한 데이터 조회시 filter 사용법은 공식문서를 참고하도록 하자
https://docs.djangoproject.com/en/4.0/topics/db/queries/
Question 수정
이미 저장된 Question 데이터를 수정해 보자
>>> q = Question.objects.get(id=2)
>>> q
id 값이 2인 데이터를 조회
>>> q.subject = 'Django Model Question'
subject 속성을 수정
>>> q.save()
>>> q
save를 수행해야지만 변경된 데이터가 반영된다
Question 삭제
이번에는 id값이 1인 Question 데이터를 삭제해 보자
>>> q = Question.objects.get(id=1)
>>> q.delete()
>>> Question.objects.all()
id값이 1인 Question 데이터가 삭제되어 조회되지 않는 것을 볼 수 있다
Answer 작성
답변 데이터를 생성해보자
>>> q = Question.objects.get(id=2)
>>> q
id값이 2인 Question 데이터 지정
>>> from django.utils import timezone
>>> a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
>>> a.save()
id값이 2인 Question 데이터에 답변 작성
>>> a.id
유일값(PK)인 id가 자동으로 생성된 것을 볼 수 있다
Answer 조회
Question 데이터와 마찬가지로 id값을 사용하여 조회할 수 있다
>>> a = Answer.objects.get(id=1)
>>> a
id값이 1인 Answer 데이터 조회
>>> a.question
어떠한 질문의 답변인지 Answer 모델에 question 속성이 연결되어 있기 때문에 같이 조회할 수 있다
>>> q.answer_set.all()
질문으로 답변을 찾는 것 또한 가능하다
이는 Quesion 모델에는 answer_set이라는 속성이 없지만 외래키(FK)로 연결되어 있어 가능하다
'Python > Django' 카테고리의 다른 글
[Django] 장고 View (1) | 2023.11.27 |
---|---|
[Django] 장고 관리자(Admin) (0) | 2023.11.27 |
[Django] 장고 Model (1) | 2023.11.24 |
[Django] Django 기본 동작 및 구조 이해 (0) | 2023.11.23 |
[Django] MVC 와 MVT (0) | 2023.11.16 |