Сериализаторы сохранения нескольких объектов

У меня есть несколько объектов сериализаторов, которые приходят из запроса в виде json файла. Я хочу хранить их в базах данных, только если они являются валидными (все они должны быть валидными)

def post_images(trip_id,data):
      data['trip']=trip_id
      serializer = TripImageSerializer(data = data)
      if serializer.is_valid():
           serializer.save()
           return Response(status = status.HTTP_201_CREATED)
      return Response({'images':serializer.errors},status= status.HTTP_400_BAD_REQUEST)
        

class Trip_apiView(generics.ListCreateAPIView):
    queryset= Trip.objects.all()
    serializer_class=TripSerializer
    def post(self, request):
         data = request.data
         dataImg=data.pop('trip_images')
         if serializer.is_valid():
                instance = serializer.save()
                respo=post_images(instance.pk,dataImg)
                if respo.status_code==400: return respo
         return Response({'trip_images' :serializer.errors}, status= status.HTTP_400_BAD_REQUEST)

это JSON :

{
     "id": 137,
     "trip_images": [
        {"image_title":"image1","image_order":1},
        {"image_title":"image2","image_order":2}
       ],
     "title": "dqw",
     "description": "nice",
     "start_date": "2022-02-08T12:00:00Z",
     "end_date": "2022-02-14T12:00:00Z",
}

Если вы хотите, чтобы проверка выполнялась для всех данных json, вы можете использовать TripImageSerializer в качестве сериализатора для поля trip_images в TripSerializer:

class TripSerializer(serializers.ModelSerializer):
    trip_images = TripImageSerializer()
    # ...

так что если вы сделаете:

serializer = TripSerializer(data=request.data)
serializer.is_valid()

is_valid() затем будет выполнена проверка и для trip_images.

Вернуться на верх