django - 如何在 Django Rest Framework 中保存外键字段
问题描述
我有一个问题跟踪器项目,经理可以将用户分配给项目。经理从下拉列表中选择一个项目和一个用户,点击提交,然后在前端调用一个 api 调用将发布数据发送到我的 django APIView assignuser。然后,Assignuser 为正确的项目和用户获取这些值和过滤器,并将该用户保存到项目用户。检查项目后,我无法将新用户保存到项目中,因为用户出现为空。在 DRF 中保存外键是否有指定的方法?
分配用户
class assignuser(APIView):
serializer_class = ProjectSerializer
def post(self, request, format=None):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user_name = serializer.get('user')
project_name = serializer.get('project_name')
user = Users.objects.get(user=user_name)
project = Project.objects.get(name=project_name)
project.user = user
project.save()
return Response(ProjectSerializer(project).data, status=status.HTTP_201_CREATED)
else:
return HttpResponse("Incorrect Credentials")
项目序列化器
class ProjectSerializer(serializers.ModelSerializer):
user = SignUpSerializer()
class Meta:
model = Project
fields = ('name', 'description', 'user')
注册序列化器
class SignUpSerializer(serializers.ModelSerializer):
class Meta:
model = Users
fields = ('username', 'password', 'email', 'role')
解决方案
你可以这样做
class assignuser(APIView):
serializer_class = ProjectSerializer
def post(self, request, format=None):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
user_name = serializer.get('user')
project_name = serializer.get('project_name')
user = Users.objects.get(user=user_name)
project = Project.objects.get(name=project_name)
project.user = user
project.user.save()
return Response(ProjectSerializer(project).data, status=status.HTTP_201_CREATED)
else:
return HttpResponse("Incorrect Credentials")
推荐阅读
- swift - Swift 多人游戏无法访问以前版本的游戏
- r - 我的数据第一列有列名时如何使用fviz_cluster集群可视化包
- java - 在 M1 Mac 上运行 Flutter Doctor 时出错 - 无法找到捆绑的 Java 版本
- python - Running shell command from python script with \n
- python - 是否有必要使用 plt.bar() 在日志直方图中居中标签?
- airflow-scheduler - 通过 CeleryExecutor 在多台机器上设置气流
- solidity - 从与 Drizzle 的合同中读取元组
- arrays - 是否可以将图像转换为数组?
- arrays - 将文件的内容读入C中的缓冲区
- r - 如何在 R 中正确绘制 SVM 模型?