第一次使用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表单标签,使POST请求时,我得到了同样的错误。
我更新了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'))
如果有任何错误或需要更多信息,我会提供。