Django-rest 框架结构未捕获 post 或发出请求
Django-rest framework structure not capturing post or put request
我正在使用 django-rest-framework 制作 JSON-API。当前 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,
}
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
当我使用 posted 参数发出 http 请求时 - http://127.0.0.1:8000/snippet/, { 'code' : 'testtest'}, api creates a new snippet instance without the posted parameters. Likewise, when I made PUT request to http://127.0.0.1:8000/snippet/1,数据未使用 put 参数更新。
我是不是漏掉了什么?
您的序列化程序没有可写字段。
fields = ('id','attribute')
你在那里定义它只有两个属性,第一个是id,第二个是只读属性。两者在写入时都在逻辑上被忽略(id 被 url 覆盖,只读是只读的)。
如果您希望能够写入其他字段,则必须将它们也包括在内。如果您仍然不想在 GET
对象时输出它们,您可以将它们添加为只写字段:
fields = ('id', 'attribute', 'foo', 'bar')
extra_kwargs = {
'foo': {'write_only': True},
'bar': {'write_only': True},
}
我正在使用 django-rest-framework 制作 JSON-API。当前 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,
}
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
当我使用 posted 参数发出 http 请求时 - http://127.0.0.1:8000/snippet/, { 'code' : 'testtest'}, api creates a new snippet instance without the posted parameters. Likewise, when I made PUT request to http://127.0.0.1:8000/snippet/1,数据未使用 put 参数更新。
我是不是漏掉了什么?
您的序列化程序没有可写字段。
fields = ('id','attribute')
你在那里定义它只有两个属性,第一个是id,第二个是只读属性。两者在写入时都在逻辑上被忽略(id 被 url 覆盖,只读是只读的)。
如果您希望能够写入其他字段,则必须将它们也包括在内。如果您仍然不想在 GET
对象时输出它们,您可以将它们添加为只写字段:
fields = ('id', 'attribute', 'foo', 'bar')
extra_kwargs = {
'foo': {'write_only': True},
'bar': {'write_only': True},
}