class NotificationSerializer(serializers.ModelSerializer): creator = user_serializers.ListUserSerializer() image = image_serializers.SmallImageSerializer() class Meta: model = models.Notification fields = ("creator", "to", "notification_type", "image", "comment")
class NotificationSerializer(serializers.ModelSerializer): creator = user_serializers.ListUserSerializer() image = image_serializers.SmallImageSerializer() class Meta: model = models.Notification fields = '__all__'
def get(self, request, image_id, format=None): likes = models.Like.objects.filter(image__id=image_id) like_creators_ids = likes.values('creator_id') users = user_models.User.objects.filter(id__in=like_creators_ids) serializer = user_serializers.ListUserSerializer( users, many=True, context={'request': request}) return Response(data=serializer.data, status=status.HTTP_200_OK)
def get(self, request, image_id, format=None): found_image = get_image(image_id) # 단수일 때는 found_image.creator 가 바로 찾아진다. # print(found_image.creator) # 결과가 복수일 때는 found_image.likes 이건 바로 안찾아진다. 한건이 아니기 때문이다. # 이때는 쿼리셋을 써서 다시 찾아줘야 한다. # 다 찾으려면 found_image.likes.all() # 한건만 찾으려면 found_image.likes.get(id=6) # 한건만 찾으면 이제 필드명으로 접근이 가능하다. found_image.likes.get(id=6).creator # 지금 현재 내게 필요한 것은 3번 이미지를 좋아요 한 사람들의 username이나 id이다. # 두가지방법이 있다. 첫번째 방법은 for문을 돌리면서 id를 뽑아 내는 것이다. # like_creators_ids = [] # for likes in found_image.likes.all(): # print(likes.creator_id) # values()를 호출했을 때 나오는 값으로 바로 호출 # print(likes.creator.id) # 객체 한번 더 타서 호출 # like_creators_ids.append(likes.creator.id) # 아니면 아래와 같이 values()를 이용하는 것이다. # print(found_image.likes.all().values()) like_creators_ids = found_image.likes.values("creator_id") users = user_models.User.objects.filter(id__in = like_creators_ids) serializer = user_serializers.ListUserSerializer(users, many=True) return Response(data=serializer.data, status=status.HTTP_200_OK)