How to save multiple object in DRF

Viewed 1646

I am having one issue .....

I want to save multiple object in a single post request ....

Here is my view

class MovieTicketCreateView (CreateAPIView):

    queryset = models.Ticket.objects.order_by('id').all()
    serializer_class = TicketSerializer

    def perform_create(self, serializer):
        details = self.request.data.get('details')
        movie_id = self.kwargs.get('movie_id')
        query = get_object_or_404(Movie, object_id=movie_id)
        for each in details:
            if each['seat']:
                seats = Seat.objects.get(id = each['seat'])
            serializer.save(movie=query, question= seats ,start_time = each['start_time])

In this view if I am creating ticket for one person its saving successfully.... But if I am creating ticket for more than one person only last details is saving ....How to save multiple object in this case

1 Answers

You're overriding the wrong method. You should override the create method as most of the create actions are done there while the perform_create saves the object in DB. You can do something like this:

def create(self, request, *args, **kwargs):
    movie = get_object_or_404(Movie.objects.all(), object_id=self.kwargs['movie_id'])
    for row in request.data['details']:
        row['movie'] = movie
        serializer = self.get_serializer(data=row)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

Of course, you will need to adapt this solution to your input data structure as I don't know how exactly it is structured.

Related