Принять ввод списка и вывод ответа с использованием Django Rest Framework - PullRequest
0 голосов
/ 08 апреля 2020

Я получаю данные этой части 1 и часть 1 успешно, а также имеется документация по этому типу проблем. Единый массив Часть 1: данные

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

Часть 1 output posting ->

{
    "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

views ->

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 изображено выше Спасибо заранее за помощь

1 Ответ

0 голосов
/ 08 апреля 2020

Скорее всего, это работа для вложенного сериализатора :

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

и удаления to_representation из LecturesSerializer. Редактирование также может быть осуществлено с помощью этой концепции.

...