【发布时间】:2022-01-24 14:53:47
【问题描述】:
我有一个 ModelViewSet,我想对新创建的对象执行更多操作。但我无法在这里获取新创建的对象 ID。 super()后如何获取新创建的对象id?
def create(self, request, *args, **kwargs):
phone = request.data.get('student_phone_number')
batch_id = request.data.get('batch_id')
class_number = request.data.get('class_number')
if not any([phone, batch_id, class_number]):
return Response({"message": "Missing Params"}, status=status.HTTP_400_BAD_REQUEST)
if self.queryset.filter(student_phone_number=phone, batch_id=batch_id, class_number=class_number,
is_cancelled=False).exists():
return Response({"message": "Compensation class already booked"}, status=status.HTTP_400_BAD_REQUEST)
super().create(request, *args, **kwargs)
【问题讨论】:
-
试过检查 super create 的返回值吗?它将返回作为创建对象的元组第一个元素。
-
返回状态码为 201(已创建)的 HTTP 响应对象。
-
查看
create方法的源代码,您可以简单地错过super调用并使用序列化程序获取新创建的实例,即instance = serializer.save(),然后执行您的逻辑。顺便说一句,我建议您在同一个序列化程序中验证缺失的字段。 -
@Ersain,谢谢。你的回答真的很有帮助,在这之后,这是一个 5 秒的变化。
标签: django django-rest-framework