[TIL | 231229] Django - 모델(Model)

sun_U·2024년 1월 2일
0

TIL

목록 보기
9/21
post-thumbnail
  • 데이터 베이스 처리
  • python [manage.py](http://manage.py) migrate - 앱이 필요로 하는 데이터베이스 테이블 생성

models.py

from django.db import models

# Create your models here.
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()

테이블 생성

  • pybo 앱을 settings.py의 INSTALLED_APPS 항목에 추가
INSTALLED_APPS = [
    'pybo.apps.PyboConfig', #추가 -> pybo/app.py 에 있는 클래스
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
  • python [manage.py](http://mange.py) makemigrations - 모델 신규 생성, 변경시 migrate 보다 먼저 수행
  • python [mange.py](http://mange.py) migrate - 모델 속성 변경시 필요,메서드 추가시에는 필요 없음.

  • python [manage.py](http://manage.py) sqlmigrate {앱이름} {작업번호} - 어떤 쿼리가 실행되는지 확인만

Shell로 모델 사용하기

  • python [manage.py](http://manage.py) shell

from pybo.models import Question, Answer

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

q.id

# 질문 조회
Question.objects.all()

# -- filter를 활용한 조회 : 조건에 해당되는 데이터 모두 return
# -- get을 활용한 조회 : 유일 값. 조건 만족 데이터가 없을 시 오류 발생
Question.objects.filter(id=1)
Question.objects.get(id=1)
Question.objects.filter(subject__contains='장고')

# 질문 수정
q = Question.objects.get(id=2)
q.subject = 'Django Model Question'
q.save() # 반드시 해야 반영됨. 

# 질문 삭제 
q = Question.objects.get(id=1)
q.delete()

# 답변 작성
q = Question.objects.get(id=2)
from django.utils import timezone
a = Answer(question=q, content='네 자동으로 생성됩니다.', create_date=timezone.now())
a.save()

# 답변 조회
a = Answer.objects.get(id=1)
a.question #객체 a를 사용해 답변에 연결된 질문도 조회
q.answer_set.all() #질문에 연결된 답 가져오기 
  • 속성__contains= ' ' - 속성에 특정 값이 있는지.
  • 연결모델명_set - 자주 쓰임, 연결된 것 가져오기
profile
Data Engineer🐣

0개의 댓글