【发布时间】:2019-01-06 07:11:59
【问题描述】:
这是我目前所拥有的。
我的序列化器:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('field_1', 'field_2', 'field_3')
我的模型视图集
class MyViewSet(ModelViewSet):
serializer_class = MySerializer
model = MyModel
queryset = MyModel.objects.all().order_by('date_paid')
def create(self, request, *args, **kwargs):
many = True if isinstance(request.data, list) else False
serializer = MySerializer(data=request.data, many=many)
if serializer.is_valid():
serializer.save()
else:
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.data, status=status.HTTP_201_CREATED)
我主要担心的是,在测试端点以使用以下有效负载创建多个对象时,在视图中 request.data 属性似乎为空,因此它返回缺少字段的错误。
{
'data': [
{
'type': 'MySerializer',
'attributes': {
'field_1': 1,
'field_2': 0.05,
'field_3': 'abc'
}
},
{
'type': 'MySerializer',
'attributes': {
'field_1': 1,
'field_2': 0.05,
'field_3': 'abc'
}
},
{
'type': 'MySerializer',
'attributes': {
'field_1': 1,
'field_2': 0.05,
'field_3': 'abc'
}
}
]
}
但是当使用单个对象实例时:
{
'data': {
'type': 'MySerializer',
'attributes': {
'field_1': 1,
'field_2': 0.05,
'field_3': 'abc'
}
}
}
它似乎工作得很好并且对象被创建了。
我尝试了几种方法来容纳有效负载:
- 将对象列表放在
attributes字段中。 - 将实例列表直接放在
data字段上,但它返回对象错误或空request.data
我应该如何发送多个对象的数据,这是否可能,我在许多文章中读到只需将many=True 放在序列化程序实例上就足以完成此任务,但我就是无法获得来自请求的数据。
我错过了什么步骤或其他解决方法?
编辑
忘了说两件事
- 我正在使用django rest framework json api 库,这可能是数据为空的原因吗?
- 我放置了字典,因为我正在测试端点并且我在发送数据时使用 json.dumps(payload)。
【问题讨论】:
-
为什么不设置` many = isinstance(request.data, list)`?避免冗余代码。
标签: django django-rest-framework