我正在使用django-rest-framework来制作JSON-API。目前,API可以使用GET和DELETE请求,但不能使用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,
}
views.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://127.0.0.1:8000/snippet/,{'code':'testtest'}发出http请求时,api会创建一个没有发布参数的新片段实例。同样,当我向http://127.0.0.1:8000/snippet/1发出PUT请求时,数据不会使用put参数进行更新。
我在这里错过了什么吗?
答案 0 :(得分:2)
您的序列化程序没有可写字段。
fields = ('id','attribute')
您在那里定义它只有两个属性,第一个是id,第二个是只读属性。写入时逻辑上忽略了两者(从URL覆盖id,只读,只读,只读)。
如果您希望能够编写其他字段,则还必须包含它们。如果在GET
对象时仍然不希望它们输出,则可以将它们添加为只写字段:
fields = ('id', 'attribute', 'foo', 'bar')
extra_kwargs = {
'foo': {'write_only': True},
'bar': {'write_only': True},
}