python - Django REST ViewSet 创建
问题描述
我有一个员工视图集,我想在其中添加创建定义,这样我就可以设置employer=request.user.pk 并添加员工(用户)。
我尝试过创建定义(请参见下面的代码),但序列化程序始终无效,因此它返回状态 400。我不知道是不是我,但似乎缺少关于 create 函数的文档,所以我可以' t弄清楚如何正确地做到这一点。有任何想法吗?
class EmployeeViewSet(viewsets.ModelViewSet):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer
def list(self, request):
queryset = self.queryset.filter(employer=request.user.pk)
serializer = CustomUserSerializer(queryset, many=True)
return Response(serializer.data)
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
CustomUser.objects.create_user(**serializer.validated_data)
return Response(serializer.validated_data, status=status.HTTP_201_CREATED)
return Response({'status': 'Bad Request',
'message': serializer.is_valid()},
status=status.HTTP_400_BAD_REQUEST)
解决方案
将方法重写perform_create
为,
class EmployeeViewSet(viewsets.ModelViewSet):
queryset = CustomUser.objects.all()
serializer_class = CustomUserSerializer
def get_queryset(self):
return CustomUser.objects.filter(employer=self.request.user.pk)
def perform_create(self, serializer):
serializer.save(employer=self.request.user)
推荐阅读
- javascript - Array() 如何在 JavaScript 中的地图中工作?
- anaconda - conda run -n Linienerkennung python Linienerkennung.py 失败,因为它不使用环境(Linienerkennung)
- c++ - 是否将对象修改为二元运算符 lik + undefined 的两个操作数?
- ios - 坚持复选标记 Swift
- python-3.x - Python3 中的泡菜文件
- linux - 脚本给出一个 curl:(3)非法字符仅在 CentOS 上的 URL 中发现
- jenkins-pipeline - 如何使用 Bitbucket webhooks 与本地 Jenkins 服务器交互?我收到 404 错误
- angular - Angular 模板语法 - 使用 ngFor 索引引用输入字段的“名称”
- regex - 数据类型和参数中的递归正则表达式
- ssl - 在更改 DNSt 之前,如何确保正确安装了 SSL?