使用Django Rest Framework接受列表输入和列表响应输出



我成功地获得了第1部分输入和第1部分输出&文档也可用于此类问题单个阵列第1部分输入

{   
"someid:"1"
"lecture_id": 1,
"subject_name": "English",
"teacher_id": 1,
"teacher_name": "Cirillo Kierans",
"room": "Room A",
"schedule": "1534567899"
}

第1部分输出过帐-->

{
"id:1,
"someid" :1
"lecture_id": 1,
"subject_name": "English",
"teacher_id": 1,
"teacher_name": "Cirillo Kierans",
"room": "Room A",
"schedule": "1534567899",
}

但是我的数据不是像上面的格式,我需要得到与上面的第1部分不同的后期响应,我期待这个多记录(列表(第2部分输入和第2部分输出

第2部分输入

{
"someid:"1"
"lectures": [{
"lecture_id": 1,
"subject_name": "English",
"teacher_id": 1,
"teacher_name": "Cirillo Kierans",
"room": "Room A",
"schedule": "1534567899"
}]
}

第2部分输出

{
"lectures": [{
"id:1,
"lecture_id": 1,
"subject_name": "English",
"teacher_id": 1,
"teacher_name": "Cirillo Kierans",
"room": "Room A",
"schedule": "1534567899",
"someid" :1
}]
}

我通过重写def-list这个函数成功地获得了数据列表序列化程序-->

class LecturesSerializer(serializers.ModelSerializer):
schedule_timestamp=serializers.IntegerField()
class Meta:
model=Lectures
fields = ('id','lecture_id','schedule_timestamp','subject_name','teacher_id','teacher_name','room')
def validate(self, attrs):
travel_date = Lectures.to_date_time(attrs.pop('schedule_timestamp'))
attrs.update({'schedule_date': travel_date})
attrs = super().validate(attrs)
return attrs
def to_representation(self, instance):
data = super(LecturesSerializer, self).to_representation(instance)
result_data={}
result_data["lectures"]=data
return result_data

视图-->

class LecturesViewSet(viewsets.ModelViewSet):
queryset = Lectures.objects.all()
def get_serializer_class(self):
return LecturesSerializer       

def dispatch(self, request, *args, **kwargs):
response = super(LecturesViewSet, self).dispatch(request, *args, **kwargs)
data = {}
data['lectures'] = response.data
response.data = data
return response 

它给出了预期的列表,但发布和更新对我来说不起作用,如何定义发布方法并为上面描述的POST和PUT获得定制的数组对象响应提前感谢您帮助

这很可能是嵌套序列化程序的作业

class SomeModelSerializer(serializers.ModelSerialiser):
lectures = LecturesSerializer(many=true, )
class Meta:
model = SomeModel
fields = ('some_id', 'lectures', )

并从CCD_ 2中移除CCD_。编辑也可以通过这个概念来完成。

最新更新