首次使用Django,我正在使用DRF构建一个简单的API,我使用的视图是框架提供的通用视图。我在我的模型中有一个JSONField,我在序列化器类中用DictField表示。使用可浏览API时,所有不同的HTTP请求都有效。我甚至可以使用JQuery对所有项目或单个项目进行GET请求,但我无法使用我在使用可浏览API进行相同请求时提供的相同数据发出请求。
我的序列化程序类如下:
class ChartsSerializer(serializers.ModelSerializer):
jsonData = serializers.DictField()
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Charts
fields = ('id', 'chartName', 'description', 'isPrivate', 'jsonData', 'owner')
默认情况下,使用ModelSerializer
课程时,jsonData
字段默认使用CharField
作为SerializerField
。
可浏览API中提供的默认模板提供了一个空列表,我将其替换为对象。
当使用HTML表单标签发出帖子请求时,我得到了同样的错误。
我更新了perform_create
方法,以确保在调用save
方法时传递给序列化程序的数据是字典。
class ChartsList(generics.ListCreateAPIView):
queryset = Charts.objects.all()
serializer_class = ChartsSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def perform_create(self, serializer):
print(self.request.data)
serializer.save(owner=self.request.user, \
jsonData=self.request.data.get('josnData'))
如果有任何错误或需要更多信息,我会提供。
答案 0 :(得分:0)
错误发生在ajax()
方法调用中,contentType
属性未正确设置。在使用框架提供的通用视图时,DRF会自动选择要使用的正确解析器。它通过查看正在设置的content-type
标头来完成此操作,这通过设置contentType
属性来完成。