首页 > 解决方案 > 如何在 DRF 中保存多个对象

问题描述

我有一个问题......

我想在一个帖子请求中保存多个对象....

这是我的看法

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])

在此视图中,如果我为一个人创建票证,则其保存成功....但是,如果我为多个人创建票证,则仅保存最后一个详细信息....在这种情况下如何保存多个对象

标签: djangodjango-rest-framework

解决方案


你覆盖了错误的方法。您应该覆盖该create方法,因为大多数创建操作都是在那里完成的,同时perform_create将对象保存在数据库中。你可以这样做:

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)

当然,您需要根据您的输入数据结构调整此解决方案,因为我不知道它的结构究竟如何。


推荐阅读