어떤 상황이 있을까 고민하면서, 상황에 맞게
내가 필요한 데이터를 가지고 오는걸 연습해봣다
잘 보이게 admin 패널에 댓글이 보이도록 해놓고
query = Story.objects.aggregate(Count("comments"))
or
query = Story.objects.all().aggregate(Count("comments"))
all이 없다면 기본적으로 모든 값을 가지고 온다
여기서 filter를 사용해서 댓글이 앙으로 시작하는 댓글의 수를 가지고오면
query = Story.objects.filter(comments__content__startswith = "앙").aggregate(Count("comments"))
이 댓글의 내용을 가지고 올려면
query = Story.objects.values("comments__content").filter(comments__content__startswith = "앙")
이렇게 하면 될줄 알았는데, 안됫다
"앙"으로 시작하는 댓글을 가진 스토리의 모든 댓글을 가지고 온다
잉??
문득 filter와 get을 사실 거의 비슷한 역할을 하지 않나 생각이 들엇다
query = Story.objects.get(comments__content__startswith = "앙")
query = Story.objects.filter(comments__content__startswith = "앙")
출력하게 되면
출력 결과를 보게되면
get은 가지고온 데이터 그 자체를 가지고오고
filter는 데이터의 쿼리셋을 가지고 온다.
filter는 쿼리셋을 가지고 오는데, get은 어떤걸 가지고 올까 궁금햇다
get = class 자체를 가지고 오게되고,
filter = QuerySet을 가지고 오게된다
만약 get을 사용했을때 결과가 없다면 None으로 뜨게 될거고,
filter의 경우는 결과가 없다면 빈쿼리셋을 들고 오겠지 생각하고 다시 테스트
filter의 경우 빈쿼리셋을 가지고 오지만,
get의 경우 가지고올 대상이 없다면, DoesNotExist 에러를 띄우게 된다
get을 사용한다면 try, except 구문을 사용하면 될 것 같다
get과 filter에 너무 꽂혀 잇는것 같지만
너무 궁금햇다 둘의 사용용도가
query = Story.objects.get(comments__content__startswith = "앙").content
get의 경우 내부의 무언가를 가지고 올때, 유용하게 쓰일것 같다
그래서 댓글을 가지고 올려고
query = Story.objects.get(comments__content__startswith = "앙").comments__content
해봤는데 ForeignKey로 연결되어 있는건 못가지고 온다
filter의 경우 위의 get처럼 사용할 수 없다
대신 테스트하다 답을 찾앗다
query = Story.objects.filter(comments__content__startswith = "앙").values("comments__content")
이런식으로 가지고 오는 거다
제일 처음 입력했던 것과 반대로 입력하게 되면
filter를 거친 내용중에서 댓글의 내용을 가지고 온다
테스트를 많이 해봤지만, 제일 기억에 남는 부분이라서.. 😁
오늘 완전 빡세게 했다
앞으로 일주일은 알고리즘을 위주로 공부할 생각이다
풀다보니까 또 재밌다
오늘은 문제푸는데 술술 풀리고 그런느낌보다는
계단 한칸 올라간 느낌이었다
지금까지 어떻게 해야할지 막막했던게
생각을 하게되고, 내 생각대로 코드를 짜보고, 내가 짠코드의 예외가 뭘까
생각하면서 풀었더니 너무 재밌엇다 👍🚀
네.. 수학은 근성입니다
못풀면 이렇게라도 찾아봐야....지ㅣ 😂
창피하니까 작게 올릴래요
이대로만 가자
4일 남앗다
수학은 근성이죠 ㅎㅎ