我只想使用PUT更新my_stage中的所有订单,例如:
"有效载荷":
{
"stages": [
{
"stage_id": 1,
"position": 2
},
{
"stage_id": 2,
"position": 3
},
{
"stage_id": 3,
"position": 4
}
]
}
和"回应":
{
"stages": [
{
"stage_id": 1,
"position": 2
},
{
"stage_id": 2,
"position": 3
},
{
"stage_id": 3,
"position": 4
}
]
}
但我没有"阶段"在我的模型中,所以我不能使用ModelSerializer。但我必须首先实现create()。 那么我应该怎么做才能实现更新?谢谢。
我的舞台模特是:
class Stage(models.Model):
class Meta:
db_table = 'stage'
position = models.IntegerField()
这是我的serialzier.py
class StagePositionSerializer(ModelSerializer):
"""Serialize order"""
# company_id = IntegerField(read_only=True)
stage_id = IntegerField(source='id', read_only=True)
position = IntegerField(min_value=0)
class Meta:
model = Stage
fields = [
'stage_id',
'position'
]
class PositionSerializer(Serializer):
stages = StagePositionSerializer(many=True)
和我的view.py
class StagePositionListView(APIView):
serializer_class = PositionSerializer
答案 0 :(得分:1)
您可以轻松利用serializer(many=True)
,它将匹配序列化列表。你的序列化器将是:
class StagePositionSerializer(ModelSerializer):
class Meta:
model = Stage
fields = [
'id',
'position'
]
class PositionSerializer(Serializer):
stages = StagePositionSerializer(many=True)
答案 1 :(得分:0)
如果您只希望在数据前添加"stages:"
,则可以在视图集中创建自定义端点,并指定要返回的格式。
我不确定为什么你有一个模型序列化器以及一个非模型序列化器。这会给你带来什么?
以下是一些示例代码,可以将“get_stages”添加到您的api url。
views.py:
class StagePositionViewSet(viewsets.ModelViewSet):
queryset = Stage.objects.all()
serializer_class = StagePositionSerializer
@list_route(methods=['GET'])
def get_stages(self, request, **kwargs):
try:
stage_list = Stage.objects.all()
serializer = StagePositionSerializer(stage_list , many=True)
results = dict()
#this is where you add your prepended info
results['stages'] = serializer.data
return Response(results, status=status.HTTP_200_OK)
except Exception as e:
return Response(e, status=status.HTTP_400_BAD_REQUEST)
然后,如果您在网址whatever_your_url/is/get_stages
上执行GET,您将获得所需的有效负载格式。