Сериализаторы сохранения нескольких объектов
У меня есть несколько объектов сериализаторов, которые приходят из запроса в виде 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.