【问题标题】:Accept list input and list response output using Django Rest Framework使用 Django Rest Framework 接受列表输入和列表响应输出
【发布时间】:2020-07-20 12:55:54
【问题描述】:

我成功地获得了第 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 获取自定义数组对象响应 在此先感谢您的帮助

【问题讨论】:

  • 请说明显示的示例中的哪一个是预期输出。 some_id 是什么 - 这是另一个模型的 FK 吗?
  • 第二部分输入和第二部分输出,some_id FK

标签: arrays json django python-3.x django-rest-framework


【解决方案1】:

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

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

并从LecturesSerializer 中删除to_representation。也可以通过这个概念进行编辑。

【讨论】:

  • 我收到此错误 --> assert self.child is not None, 'child is a required argument.' AssertionError: child 是必需的参数。
  • 我认为这不是确切的解决方案
  • 这是一个伪代码,我可能会稍后检查它是否缺少任何选项。
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2019-12-05
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多