Day 10 Django for KN

김의석 ·2024년 2월 15일

Django

목록 보기
10/39

Django for KN(Koinonia)

  • 해당 문서는 사귐의 교회 청소년부 출석부 프로젝트를 위한 Django 학습 내용과 개발 과정을 기록함

1 : N 관계-models.ForeignKey

  • ForeignKey : 모델 간의 관계를 나타내는 필드, 부모-자식 관계를 형성
  • 1명의 유저(User)가 쓰는 다수의 포스팅(Post)
    1명의 유저(User)가 쓰는 다수의 댓글(Comment) 1개의 포스팅(Post)에 다수의 댓글(Comment)
# Instagram models.py

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class Comment(models.Model): # 하나의 포스트에 다수의 코멘트
    post = models.ForeignKey(Post, on_delete=models.CASCADE) 
    # post_id 필드가 생성, 가상의 필드이며 실제 데이터베이스와 다름.
    message = models.TextField()
  • to : 대상모델
  • on_delete : Record 삭제 시 Rule
    • CASCADE : FK로 참조하는 다른 모델의 Record도 삭제.

올바른 User Model 지정

# Project settings.py

AUTH_USER_MODEL = 'auth.User'
# Project 생성 후 가장 먼저 작성하는 것이 좋다.
# Instagram models.py

from django.db import models
from django.conf import settings # settings의 값을 이용하기 위해 import

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
	# settings.AUTH_USER_MODEL setting의 값 사용
  • 올바른 User Model = Global User Model
  • Local User Model과 구분되어 사용한다.

FK에서의 ReverseName

  • reverse 접근 시의 속성명 : 디폴트는 "모델명소문자_set"
from django.db import models

class Post(models.Model):
	title = models.CharField(max_length=100) content = models.TextField()

class Comment(models.Model):
	post = models.ForeignKey(Post, on_delete=models.CASCADE)
    message = models.TextField()

# 모델명소문자_set, comment_set
>>> comment.post
>>> post.comment_set.all() == Comment.objects.filter(post=post)
# 모두 comment model 내 작성되어 있는 예시에서 post_id가 4로 작성한 2개의 object가 출력된다.
profile
널리 이롭게

0개의 댓글