1

JSON-APIを作成するために django-rest-framework を使用しています。現在、API は GET および DELETE リクエストで機能しますが、POST および PUT リクエストでは機能しません。どういうわけか、post または put パラメータがキャプチャされません。これが私のシリアライザーと私のビューです。

serializers.py

class SnippetSerializer(serializers.HyperlinkedModelSerializer):
   attribute = serializers.SerializerMethodField()

   class Meta:
      model = Snippet
      fields = ('id','attribute')

   def get_attribute(self, obj): 
      return {
         'code': obj.code, 
       } 

ビュー.py

from resources.snippets.models import Snippet
from .serializers import SnippetSerializer
from rest_framework import viewsets

class SnippetViewSet(viewsets.ModelViewSet):
   queryset = Snippet.objects.all()
   serializer_class = SnippetSerializer 

投稿されたパラメーターを使用して http 要求を作成したとき - http://127.0.0.1:8000/snippet/ { 'code' : 'testtest'}、api は、投稿されたパラメーターなしで新しいスニペット インスタンスを作成します。同様に、http://127.0.0.1:8000/snippet/1に PUT リクエストを送信すると、データは put パラメータで更新されません。

ここで何か不足していますか?

4

1 に答える 1

2

シリアライザーには書き込み可能なフィールドがありません。

fields = ('id','attribute')

最初の属性は id で、2 番目の属性は読み取り専用属性です。どちらも書き込み時に論理的に無視されます (id は URL からオーバーライドされ、読み取り専用は読み取り専用です)。

他のフィールドを書き込めるようにしたい場合は、それらも含める必要があります。オブジェクトを作成したときにそれらを出力したくない場合はGET、書き込み専用フィールドとして追加できます。

    fields = ('id', 'attribute', 'foo', 'bar')
    extra_kwargs = {
        'foo': {'write_only': True},
        'bar': {'write_only': True},
    }
于 2015-06-26T05:45:14.517 に答える