검색능력이 중요하다는 것을 새삼 느낀다.
원래 기존의 방식은 모든 post 나 todo를 서버에서 가져와서 작성자와 user를 비교하고 같은 것만 보여주게끔 프로그래밍 했었다. 하지만 글의 개수가 많아질수록 전체를 가져오는 것은 무리가 있을 거 같다고 판단하고 작성자를 먼저 찾고 그 다음 작성자의 글들을 출력해주는게 빠르지 않을까? 라는 생각으로 시작했다.
처음 내가 생각한 방법은 Author class에 Post class를 넣는 중첩클래스 방법이었다. 하지만 Form을 만드려고 하니 외부클래스로 만들든 내부클래스로 만들든 문제가 발생했다. 외부클래스로 만들면 field에 내부클래스 요소를 넣지 못하고 내부클래스로 만들면 외부클래스에 있는 author을 가져올 수 없었다.
그래서 두번째 생각한 방법은 class 두 개를 따로 만들어서 예전에 Post와 Comment를 ForeignKey로 연결한 것 처럼 연결해서 사용해보려고 했다. 하지만 이후 세번째 방법이 더 좋은 방법인 것 같아 세번째 방법으로 구현했다.
세번째 방법은 그냥 django에 있는 django.contrib.auth.models에 있는 User에서 글들을 가져오는 것이다.
todo_list = request.user.todo_set.all()
이 방법도 처음에는 models에 있는 User에서 request.user와 대조해서 current_user를 찾고 이 user가 쓴 글들을 찾아야 되는 줄 알고 열심히 했더랬다.
이후 더 검색해보니 request.user에서 바로 todo_list를 가져올 수 있다는 것을 알게되었다.
https://stackoverflow.com/questions/27251160/django-foreign-key-user-has-no-attribute-post-set
Django foreign key user has no attribute post_set
I've got these two models. class UserProfile(models.Model): user = models.OneToOneField(User) THIS SHOULD BE def posts(self): return self.user.poster.all() INSTEAD OF def posts(...
stackoverflow.com
ㅇ다만 과연 성능향상이 있었는가가 궁금해서 테스트를 위해 다른 계정에 10만개씩 데이터를 넣었었는데 이정도 글의 개수로는 전체를 가져와도 작은 것인지 아니면 글의 개수가 더 많아져도 차이가 안나는 방법인지 너무 빨리 실행되서 알 수 없었다.
'Framework > Django' 카테고리의 다른 글
| 쿼리셋(QuerySet)을 필드(field)에 따라 나누기 in Django (0) | 2022.03.05 |
|---|---|
| 시작하며 (0) | 2022.03.03 |