2016-10-23 7 views
0

モデルを更新しようとすると、シリアライザにpkフィールドが含まれません。 私のシリアライザは、以下のようになります。私はhttp.get呼び出しから私の本を取得するとDjango Rest Framework ModelSerializer pkフィールドが更新時に存在しない

class BookSerializer(serializers.ModelSerializer): 
    pages = PageSerializer(many=True) 

    class Meta: 
     model = Book 
     fields = ('pk', 'tite', 'pages') 

、件のデータがPKキーが含まれています。しかし、http.putメソッドでこのデータを投稿すると、シリアライザのvalidated_dataにキャッチされたデータにはpkフィールドが含まれません。このシリアライザを各シリアライザに定義する必要がありますか?私はDRF 3がデフォルトでそれを行うべきですが。

答えて

1

とにかくpkは更新しません。デフォルトでは、それは読み取り専用なので、書き込み操作用には持っていません。 本当に必要な場合は、読み書き可能とします。

+0

を更新しているIDとオブジェクトの他のすべての値は、私はネストされたフィールドをudpdateしたい場合は続行するが、別の方法ですか? – Ben

+1

なぜでしょうか?ネストされたシリアライザで[extra_kwargs](http://www.django-rest-framework.org/api-guide/serializers/#additional-keyword-arguments)を使用するのは非常に簡単です。 – Linovia

+0

ええ、私たちはupdate pkを望んでいませんが、pkを読むことができ、オブジェクトのidが分かります。 –

0

あなたはself.instanceでPKを見つけることができ、また、我々は

if self.instance: 
    pk = self.instance.pk 
関連する問題