
DRF-단일 모델조회 API와 외래키 학습 후 현재 PM(UI 디자인 겸)이 열심히 figma에 업데이트 중인 UI 중 하나를 골라 그 UI에 필요한 REST API를 만들어 보겠습니다!
urlpatterns = []
urlpattern_api_v1 = [
path("", views.TitleListAPIView.as_view(), name="title_list"),
]
urlpatterns += [
path("api_report/", include((urlpattern_api_v1, "api-v1"))),
]
urls.py는 실습과 동일한 패턴으로 작성했다.
이후 개발에서도 이 패턴으로 API 버젼을 관리할 것 같다!
class UserCheck(models.Model):
title = models.CharField(max_length=30, null=True, default=None)
UserCheck 모델에 title을 저장하는 필드가 없다는 것을 확인했다!
처음에는 date 필드 활용을 고민했지만 title 필드를 추가했다.
class Command(BaseCommand):
def handle(self, *args, **options):
for __ in tqdm(range(cnt), desc="하나님 앞에서 생성"):
title = f"{date}" "양육일지" # 짧은 텍스트
post = UserCheck(
title=title,
)

UI에 표시할 title 더미 데이터를 생성 후 확인!
class TitleListSerializer(serializers.ModelSerializer):
class Meta:
model = UserCheck
fields = [
"id",
"title",
]
@staticmethod
def get_optimized_queryset(request) -> QuerySet[UserCheck]:
return UserCheck.objects.filter(teacher=request.user).only("id", "title")
# 기존 실습코드
# @staticmethod
# def get_optimized_queryset() -> QuerySet[Post]:
# return Post.objects.all().only("id", "title", "author").select_related("author")
구현하고자하는 양육일지 리스트 조회 API는 로그인한 USER 기준으로 조회하는 것이 목적이고, Queryset 작성 시 필히 request.user에 대한 접근이 필요하다.
하지만 @staticmethod의 클래스의 인스턴스 상태나 클래스의 변수에 의존하지 않고 독립적인 메서드인 경우에 상용되는 특성에 따라 기존 실습코드에서는 변수전달이 되지 않는 것을 확인했다!
get_optimized_queryset 메서드가 request를 전달 받을 수 있도록 수정했고 TitleListAPIView에서 일부 수정이 필요했다!
class TitleListAPIView(ListAPIView):
serializer_class = TitleListSerializer
def get_queryset(self):
return TitleListSerializer.get_optimized_queryset(self.request) # self?
def list(self, request: Request, *args, **kwargs):
response: Response = super().list(request, *args, **kwargs)
if isinstance(request.accepted_renderer, (JSONRenderer, BrowsableAPIRenderer)):
response.data = ReturnDict(
{
"test!": True,
"result": response.data,
},
serializer=response.data.serializer,
)
return response
post_list_view = TitleListAPIView.as_view()
get_queryset를 오버라이드하여 request를 인자로 받는 인스턴스 메서드로 재정의!
마지막으로 TitleListSerializer.get_optimized_queryset 메서드에 requst를 전달할 수 있도록 했다!

User(uiseoo)를 기준으로 작성한 양육일지 리스트 조회 확인!