본문 바로가기

About coding/Today I learned

2023년 05월 18일 TIL [#drf 데이터관계]

 

 


오늘의 학습 계획

_django REST frame work 복습

_깃허브 readme.md 작성법 확인

 


기록하고 싶은 학습내용

_이창호 튜터님 drf 강의

일대일, 일대다, 다대다

식별, 비식별

참조, 역참조

 

내용========================================

원 투 원
일 대 일
관계는

models.py에 forignkey 가져오고
()에 unique = True 하면

그게 일대일 관계다.

foreign key에서 unique True를 주는 것은
원투원 필드와 똑같다.

노란색 워닝 = 문법적으론 문제 없으나, 잠재적으로 문제가 있을까봐 권장하지 않을 때 나옴

models.ForeignKey(unique=True)
이거 이렇게 쓰지말고
.OneToOneField로 쓰기.
user = models.OneToOneField(User, on_delete=models.CASCADE)

-----------------------------------

한명의 사용자가
여러개의 게시글을 작성할 수 있을 때는
원투원이 아닌
foreignKey 사용

--------------------------------
정리하자면
일대다는 foreignkey만.

일대일은 OneToOneField
---------------------------------
취미처럼 다대다는
ManyToManyField
다대다 관계를 생성하면
중간테이블이 저절로 하나 생긴다.
---------------------------------



정참조는

참조한 필드의 오브젝트를 가져오는 일.
포린키,
원투원,
매니투매니 등

아티클에서 유저의 이메일을 가져오고 싶을 때.



데이터 테이블에서
가로줄이 오브젝트, 객체, 인스턴스, 로우, 레코드, 튜플
세로줄이 필드

----------------------------------

역참조는
리버스릴레이션쉽

말그대로 역으로 참조한다.

아까 게시글을 기준으로
유저를 참조할때
어써를 가지고 유저를 찾아갔는데

이번엔 반대로

유저테이블에서
id 1번을 가지고
아티클을 참조하는것.

작성자로 1번 유저를 가지고 있는 게시글을
찾아라!


1.related_name을 지정하지 않았을때
user.article_set.all()
**소문자 테이블명 + _set


2.related_name을 지정했을 때
user.articles.all()
*내가 models Foreignkey()에서 지정한 이름을 articles 자리에 넣음.


정리하면,
1번 게시글의 작성자가 누구야? 정참조
1번 사용자가 작성한 게시글이뭐야?역참조


----------------------------------

식별 비식별
ForeignKey로 관계를 맺고나서
그 포린키를 PrimaryKey로도 사용하고
있으면 식별관계.


즉,

pk가 foreign 키이면 식별관계
유효성 있음
author 필드를 비울 수가 없음
pk 필드기 때문에.


pk가 별개의 pk면 비식별관계
유효성 없음
author 필드를 비워두면됨


게시글은 무조건 작성자가 있어야 하므로
foreignkey가 pk.
.ForeignKey(primarykey=True)
유효성 옵션을 줄 수 있다.
작성자가 없는 게시글은 존재할 수 없는 것.

==================================
역참조할때
.filter 하면 결과값이 쿼리셋인데
거기서 인스텐스로 추출하려면
user.article_set.filter("조건")
뒤에 [0], [1], .first, .last, .get
이런식으로 하면됨.
근데 이런 걸 쓸 일은 잘 없음


특강이 있어서 도움은 됐는데...

특강 듣다가 저녁시간이 통째로 날라가버렸다.

특강 있는 줄 생각 안하고 있었다가 ㅜㅜ 흑

내일은 drf 강의 집중해서 이어 들어야지