Django 休息框架响应(如果存在)
Django rest framework response if exists
我想在尝试创建配置文件时显示错误,但用户已有一个配置文件
在我的 views.py
class ProfileViewSet(viewsets.ModelViewSet):
serializer_class = ProfileSerializer
def get_queryset(self):
queryset = Profile.objects.filter(owner=self.request.user)
return queryset
def get_permissions(self):
permission_classes = []
if self.action == 'create':
permission_classes = [IsAuthenticated]
elif self.action == 'retrieve' or self.action == 'update' or self.action == 'partial_update':
permission_classes = [IsOwner]
elif self.action == 'list':
permission_classes = [IsAuthenticated]
elif self.action == 'destroy':
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
def perform_create(self, serializer):
profile = Profile.objects.filter(owner=self.request.user)
if not profile.exists():
serializer.save(owner=self.request.user)
else:
return Response(data={'detail': 'This user already has a profile'}, status=status.HTTP_400_BAD_REQUEST)
当我为已有用户创建个人资料时,我没有显示错误
perform_create
不是进行此类检查的正确位置。它没有 return 任何东西。
您可以在视图集的创建方法中进行检查:
class ProfileViewSet(viewsets.ModelViewSet):
...
def create(self, request, *args, **kwargs):
if Profile.objects.filter(owner=self.request.user).exists():
return Response(data={'detail': 'This user already has a profile'}, status=status.HTTP_400_BAD_REQUEST)
return super().create(request,*args,**kwargs)
或者您可以让视图集保持干净和简单,并在序列化程序的验证方法中执行检查。您只需要在创建序列化程序时传入用户实例。您可以使用序列化程序的上下文来执行此操作。 Context docs.
我想在尝试创建配置文件时显示错误,但用户已有一个配置文件
在我的 views.py
class ProfileViewSet(viewsets.ModelViewSet):
serializer_class = ProfileSerializer
def get_queryset(self):
queryset = Profile.objects.filter(owner=self.request.user)
return queryset
def get_permissions(self):
permission_classes = []
if self.action == 'create':
permission_classes = [IsAuthenticated]
elif self.action == 'retrieve' or self.action == 'update' or self.action == 'partial_update':
permission_classes = [IsOwner]
elif self.action == 'list':
permission_classes = [IsAuthenticated]
elif self.action == 'destroy':
permission_classes = [IsAdminUser]
return [permission() for permission in permission_classes]
def perform_create(self, serializer):
profile = Profile.objects.filter(owner=self.request.user)
if not profile.exists():
serializer.save(owner=self.request.user)
else:
return Response(data={'detail': 'This user already has a profile'}, status=status.HTTP_400_BAD_REQUEST)
当我为已有用户创建个人资料时,我没有显示错误
perform_create
不是进行此类检查的正确位置。它没有 return 任何东西。
您可以在视图集的创建方法中进行检查:
class ProfileViewSet(viewsets.ModelViewSet):
...
def create(self, request, *args, **kwargs):
if Profile.objects.filter(owner=self.request.user).exists():
return Response(data={'detail': 'This user already has a profile'}, status=status.HTTP_400_BAD_REQUEST)
return super().create(request,*args,**kwargs)
或者您可以让视图集保持干净和简单,并在序列化程序的验证方法中执行检查。您只需要在创建序列化程序时传入用户实例。您可以使用序列化程序的上下文来执行此操作。 Context docs.