重写创建函数后,如何在django中获取新创建对象的id?
After overriding create function, how to the get the id of the newly created object in django?
我有一个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)
您应该覆盖 perform_create 而不是在 ModelViewSet 上创建方法
def perform_create(self, serializer):
phone_value = self.request.data['phone']
batch_id_value = self.request.data['batch_id']
class_number_value = self.request.data['class_number']
// do your condition here
instance = serializer.save(phone=phone_value, batch_id=batch_id_value, class_number=class_number_value)
instance_id = instance.id
// do whatever you want with instance_id
return Response({"message": "Data Has been saved", Id:instance_id }, status=status.HTTP_201_CREATED)
调用 serializer.save() 应该 return 刚刚创建的实例。
我有一个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)
您应该覆盖 perform_create 而不是在 ModelViewSet 上创建方法
def perform_create(self, serializer):
phone_value = self.request.data['phone']
batch_id_value = self.request.data['batch_id']
class_number_value = self.request.data['class_number']
// do your condition here
instance = serializer.save(phone=phone_value, batch_id=batch_id_value, class_number=class_number_value)
instance_id = instance.id
// do whatever you want with instance_id
return Response({"message": "Data Has been saved", Id:instance_id }, status=status.HTTP_201_CREATED)
调用 serializer.save() 应该 return 刚刚创建的实例。