2017-08-08 13 views
1

私はモデルの製品を持っている:DjangoのRESTフレームワーク画像アップロード

class Product(models.Model): 
    ... 
    image = models.ImageField(
     upload_to=lambda instance, filename: 'images/{0}/{1}'.format(instance.id, filename), 
     max_length=254, blank=True, null=True 
    ) 
    ... 

それから私は持っているシリアライザ:

class ProductSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Product 
     fields = (
      ... 
      'image', 
      ... 
     ) 

そして私は、ビューがあります。

class ProductViewSet(BaseViewSet, viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 

すると、私は画像をアップロードすることができますどのように郵便配達員と?イメージをモデルにアップロードするベストプラクティスは何ですか?ありがとうございました。あなたが画像をアップロードするための別のエンドポイントを作成することができます

+1

paranthesis、 'serializer_class = ProductSerializer'を削除します。' ModelViewSet'を使用している場合は、もっと何も書く必要はありません。 'ViewSet'はあなたのためにすべてを処理します。 – zaidfazil

+0

ありがとう、ありがとう、郵便受けやAjaxリクエストで画像をアップロードするにはどうすればいいですか? –

答えて

2

、それはそのようになります:

class ProductViewSet(BaseViewSet, viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 

    @detail_route(methods=['post']) 
    def upload_docs(request): 
     try: 
      file = request.data['file'] 
     except KeyError: 
      raise ParseError('Request has no resource file attached') 
     product = Product.objects.create(image=file, ....) 

あなたはそのソリューション

の周りに行くことができます - アップデート: これは郵便配達 enter image description here

からアップロードする方法です
+0

ありがとうございます。しかし、私はどのように郵便配達員経由で画像をアップロードできますか? –

+1

あなたはbodyの 'form-data'を選択し、タイプを選択してファイルを選択し、キーフィールド に' file'と書いてください。 –

+0

ありがとう! '/ api/products/33/upload_docs'のような" PUT "メソッドでurlを持つことはできますか? –

関連する問題