2016-03-24 5 views
2

ProductImageというモデルには、いくつかのフィールドとDjango ImageFieldというモデルがあります。この場合、私はすでにオブジェクトを作成していますが、オブジェクトのfeaturedブール値を更新したいとします。イメージフィールドでオブジェクトを更新する方法 - Django Rest Framework

問題は、私は(AngularJSを使用)$http.put()を行うときに、私は、エラーが返さ言ってもらうことです。

を提出したデータファイルではありませんでした。フォームのエンコーディングタイプを確認してください。

私のRESTのAPIオブジェクトは、GETリクエストに次のようになります。

{ 
    "id": 15, 
    "image": "http://127.0.0.1:8000/media/products/photo_1_5.JPG", 
    "alt": "HelloWorld", 
    "featured": false, 
    "product": 1 
} 

私はこのようなルックスを送信するHTTP PUTリクエスト:(お知らせfeaturedtrueに変更されました)

{ 
    "id": 15, 
    "image": "http://127.0.0.1:8000/media/products/photo_1_5.JPG", 
    "alt": "HelloWorld", 
    "featured": true, 
    "product": 1 
} 

だから...イメージファイルを再提出/再アップロードせずにオブジェクトを更新するにはどうすればいいですか?

答えて

1

PUTを使用してオブジェクトを更新する場合は、完全なインスタンスを送信する必要があります。あなたの場合は、画像にURLではなくimageの画像ファイルを送信する必要があります。

おそらく最も簡単な解決策は、おそらくPUTの代わりにPATCHを使用することです。次に、部分的な更新を行い、更新されたフィールドのみを送信することができます。

{ 
    "featured": true 
} 
+0

私は 'PATCH'を行うと、辞書のうち' image'を除外すると、それは '画像= NONE'として扱い、それがnull'なので'古い 'image'値を上書きします。私は行方不明の設定ですか? –

+0

シリアライザまたはビューの 'update'メソッドをオーバーライドしましたか? – ilse2005

+0

ああ、そうです。それがそれを解決しました。 –

関連する問題