묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요! 선생님 serializer return에 대해서 질문드립니다!!
안녕하세요!!! serializer return 값에 대해서 질문드리려고합니다!! ㅎㅎ 저의 post 모델중 아래 필드가 하나있습니다!! video = models.FileField(upload_to='videos/%Y/%m/%d', null=True, blank=True) 이를 serializer하여 리턴하려 하는데 위에 보이시다시피 null 값이 허용이 됩니다! 하지만 프론트엔트 개발자가 null값일 경우에는 뭐라도 리턴값을 아무거나라도 해달라고 해서 (처리하기 번거롭다고해서 ;;) 아래와 같이 serializermethod를 따로 만들어서 -> videos = serializers.SerializerMethodField('get_video') 만일 video필드에 아무것도 넣지않은 null 요청일경우는 return {'detail': "비디오가 없습니다."} 요론식으로 리턴하려 하고 만일 video가 있으면? 즉 video를 넣어 post 요청을하면 video필드의 fullurl? path? 를 respone로 리턴하려고 하는데 (일반적인 serializer 응답처럼용~~) upload_to 의 경로가 걸려있다보니깐 fullpath를 딱 구해지지가 않네요... 즉 print(request.build_absolute_uri(post.video.url)) 이런식으로 출력하면 오늘년도날짜가 제외된 url이 나옵니다 -> http://127.0.0.1:8000/media/%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4! 위와 같은 식으로 나옵니다 실제 저장된 경로는 media뒤에 videos/년/월/일이 있어야 하는데 말이죵;; 사실 궁극적인 목적으로는 null값에 대한 아무값이나 리턴을 원하는데 위는 제가 생각한 방식이고 제 생각에는 더 쉽고 정석적인 방법 있을것 같으나 찾지 못해서 위와 같이 흙수저씩 코딩을 하고 있네요 ..ㅠㅠ 분명 null에 대한 좀더 효과적인 처리방법이나 아니면 한방에 url 받아오면 메소드가 있을것같은데 아직 모르는게 많아서 찾기가 어렵네요 ~ 더 명확하고 정석적인 방법으로 안내 해주시면 정말 감사하겠습니다!!!!!!!!!!!!!!!!!!!!!! 항상 정말 감사합니다 !!!!
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
안녕하세요 !!!!!!선생님 !!! tag모델 manytomany serializer response에 대하여 질문드려요!! ㅎㅎ
안녕하세요 선생님!!!! ㅎㅎㅎ tag모델 manytomany에 대하여 api response에 대하여 질문드립니다!!! ㅎㅎ 선생님 강의 참고하면서 정규식으로 tag모델의 text를 저장하는것을 참고해서 만들었는데요 postman으로 tag응답을 리스트로 받고 싶은데,, 음 어떻게 view나 serializer를 코딩 해야 받을 수 잇을지 모르겠네요;; 위는 post 모델이구요! tag 모델입니다!! view는 Modelviewset을 이용해서 만들었구요!! 강의에서 caption에서 정규식으로 태그 내용끌어온거 그대로 동작하게 만들어서(caption에서 content로 필드명을 바꿨습니다!) post요청시에 자동으로 tag가 저장이 됩니다!! 다만 작성된 tag 들도 응답을 받고 싶은데 스택오버플로우를 따라 했는데도 아예 field도 안잡히네용 ㅠㅠ 위는 한 포스트 생성시 image를 여러개를 담아서 저장 할 수 있도록 코드도 짯고 저렇게 리스트 응답이 오도록 만들었는데,, tag도 images응답과 비슷하게 생성 된 태그에 대해서 response를 받으려면 어디를 건들어야 할까요!!???? 지금 현재 postserializer는 위와 같이 되있습니다. tags필드는 아예 응답을 하지 않네요 ㅠㅠ serializer를 어떻게 커스텀을 해야하는지 궁금하네요 ㅠㅠ!! 저번에도 선생님께서 친절하게 알려주신 방법으로 코드를 수정해서 성능와 ux가 매우 좋아졌습니다!! !!!!!! 항상 진심으로 진심으로 감사드립니다!!!!!ㅎㅎㅎㅎ ;-D
-
미해결Django REST Framework 핵심사항
PostSerializerDetail serializer를 이용해 직렬화하고, 해당 ViewSet을 router를 통해 url 매핑을 한 후 api2/post/<int:pk>(get) 엔드포인트에 request를 하면 에러가 발생합니다.
* VueDjAgencyDrf-untilCh7-2의 api2/views.py에서 (프로그래머가 직접 직렬화하는 것이 아니라 VueDjAgencyDrf-untilCh6의) PostSerializerDetail serializer를 이용해 직렬화하고, 해당 ViewSet을 router를 통해 url 매핑을 하면 아래와 같은 에러가 발생합니다... * 제가 추가한 코드는 다음과 같습니다. # api2/urls.py router = routers.DefaultRouter() router.register(r'post', views.PostViewSet) urlpatterns = [ ... path('', include(router.urls)), ... ] # api2/views.py def get_prev_next(instance): try: prev = instance.get_previous_by_update_dt() except instance.DoesNotExist: prev = None try: next_ = instance.get_next_by_update_dt() except instance.DoesNotExist: next_ = None return prev, next_ class PostViewSet(ModelViewSet): queryset = Post.objects.all() serializer_class = PostListSerializer pagination_class = PostPageNumberPagination def get_serializer_context(self): return { 'request': None, 'format': self.format_kwarg, 'view': self } def get_queryset(self): return Post.objects.all().select_related('category').prefetch_related('tags', 'comment_set') def retrieve(self, request, *args, **kwargs): instance = self.get_object() prevInstance, nextInstance = get_prev_next(instance) commentList = instance.comment_set.all() data = { 'post': instance, 'prevPost': prevInstance, 'nextPost': nextInstance, 'commentList': commentList, } serializer = PostSerializerDetail(instance=data) return Response(serializer.data) * 그런데 이 이슈는 아래와 같이 router를 쓰지 않으면 발생하지 않고 정상 동작합니다. path('post/', views.PostViewSet.as_view(actions={ 'get': 'list', }), name='post-list'), path('post/<int:pk>/', views.PostViewSet.as_view(actions={ 'get': 'retrieve', }), name='post-detail'), path('post/<int:pk>/like/', views.PostViewSet.as_view(actions={ 'get': 'like', }), name='post-like'), * 어떻게 하면 PostSerializerDetail를 통해 직렬화하고 해당 ViewSet이 router를 이용하도록 하여도 에러가 나지 않을 수 있을까요?