2

파일과 관련된 JSON을 업로드해야합니다. 그러나 다른 부분, 특히 JSON 부분을 저장하는 방법을 이해하지 못합니다. 즉 JSON이 아닌 이미지를 저장할 수 있습니다.Django Rest Framework에서 MultiPartParser를 사용하는 방법

I read that I need to use a MultiPartParser하지만 제대로 serializer 클래스에 통합하는 방법을 알 수 없습니다. 여기

<QueryDict: {'geo': ['{"point" : { "type:" : "Point", "coordinates" : [11.51350462236356, -22.70903491973877]}}'], 'picture': [<TemporaryUploadedFile: photo3.jpg (image/*)>]}> 

뷰입니다 : 여기

class UserUploadedPicture(APIView): 

    def post(self, request, format=None): 
     print(request.data) 
     print("\n\n\n") 
     serializer = PictureSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return JsonResponse(serializer.data) 
     return JsonResponse(serializer.errors, status=400) 

시리얼 라이저입니다 : 다음은

class PictureSerializer(GeoFeatureModelSerializer): 
    class Meta: 
     model = Pictures 
     geo_field = "point" 
     fields = ('picture', 'processed', 'flagged', 'point') 

여기

내 서버가 수신하는 멀티 파트 요청입니다 모델 :

class Pictures(models.Model): 
    objects = models.GeoManager() 
    picture = models.ImageField(null=True, default=None, blank=True) 
    processed = models.BooleanField(default=False) 
    flagged = models.BooleanField(default=False) 
    point = models.PointField(null=True, default=None, blank=True) 

누구나 point 필드를 올바르게 serialize하는 방법을 알려주십시오. 어쩌면 JSON 형식을 변경해야합니까? 어쩌면 내가 serializer를 바꿀 필요가 있을까요?

답변

2

MultiPartParser 통합과 관련하여 MultiPartParser는 요청을 받고 처리하는 것이므로 serializer가 아니라보기를 통해 수행됩니다. 클래스 기반보기를 사용 중이며 제공된 공식 문서의 링크와 마찬가지로 parser_classes 속성을 사용하여 파서를 정의합니다.

그래서보기가된다 :

class UserUploadedPicture(APIView): 
    parser_classes = (MultiPartParser,) 

    def post(self, request, format=None): 
     print(request.data) 
     print("\n\n\n") 
     serializer = PictureSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return JsonResponse(serializer.data) 
     return JsonResponse(serializer.errors, status=400) 

그리고 PointField에 대한 시리얼 라이저와 직결 확인 this SO answer

관련 문제