django - 如何在 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])
在此视图中,如果我为一个人创建票证,则其保存成功....但是,如果我为多个人创建票证,则仅保存最后一个详细信息....在这种情况下如何保存多个对象
解决方案
你覆盖了错误的方法。您应该覆盖该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)
当然,您需要根据您的输入数据结构调整此解决方案,因为我不知道它的结构究竟如何。
推荐阅读
- python - 如何检查 3 列是否相同,如果值相同,如何添加一个新列?
- r - 如何使用闪亮在交互式 html 报告中显示两个数据输出
- javascript - 电子:NodeJS 'net' 模块返回空对象
- r - 为什么随机效应估计器不正确
- vue.js - 为什么在 vuejs 应用程序中,vuejs 应用程序中的 prefer-const 规则没有被禁用?
- amazon-web-services - 未在 AWS boto3 costExplorer get_cost_and_usage() 函数中获取总成本
- javascript - 如何使用来自 AJAX 请求的响应故意刷新或崩溃浏览器选项卡
- php - Laravel:如何从复选框中获取值以及文本输入中的值
- google-bigquery - Bigquery SQL 长文本拆分与数字
- c++ - 错误:命名空间“std”中的“mutex”未命名类型