2

ファイルとそれに関連付けられたJSONをアップロードする必要があります。しかし、私はさまざまな部品、具体的にはJSONの部品を保存する方法を理解していません。つまり、イメージは保存できますが、JSONは保存できません。Django Rest FrameworkでMultiPartParserを使用する方法

I read that I need to use a MultiPartParserしかし、私はそれをシリアライザクラスに正しく統合する方法を理解できません。ここで

は私のサーバーが受信しているマルチパート要求である:ここで

<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フィールドを正しくシリアル化する方法を教えてください。多分私はJSON形式を変更する必要がありますか?多分私はシリアライザを変更する必要がありますか?

答えて

2

MultiPartParserを統合することは、シリアライザではなく、要求の受信と処理の責任を負うため、ビューで行われます。 クラスベースのビューを使用しており、パーサの定義は、提供した公式ドキュメントへのリンクと同じリンクの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

をチェック
関連する問題