django - 返回 user_id 作为 post api 的响应
问题描述
我想为user_id
使用 post api 创建的每个对象返回。
我想以以下形式输出
[
{"info": {
"status": "SUCCESS",
"message": "User Details Successfully Uploaded"
},
"user_id": 10001
}
]
这是我的代码
序列化程序.py
class UserDetailsSerializer(serializers.ModelSerializer):
"""docstring for UserDetailsSerializer"""
class Meta:
model = UserDetails
fields = ['user_id', 'user_email', 'user_full_name', 'user_token', 'patient_id', 'user_preferences']
read_only_fields = ['user_id']
视图.py
class UserDetailsViewSet(APIView):
def get(self, request):
queryset= UserDetails.objects.all()
serializer_class=UserDetailsSerializer(queryset,many=True)
return Response(serializer_class.data)
def post(self, request):
serializer_class_post=UserDetailsSerializer(data=request.data)
if serializer_class_post.is_valid():
try:
serializer_class_post.save()
return Response([{"info": {
"status": "SUCCESS",
"message": "User Details Successfully Uploaded"
},
"user_id": serializer_class_post.data
}], status=status.HTTP_201_CREATED)
except IntegrityError as e:
return Response([{"info": {
"status": "Error",
"message": "Error Uploading User Details"
}
}], status=status.HTTP_400_BAD_REQUEST)
return Response(serializer_class_post.errors, status=status.HTTP_400_BAD_REQUEST)`
模型.py
class UserDetails(models.Model):
user_id = models.IntegerField(primary_key= True)
user_email = models.CharField(max_length=254)
user_full_name = models.CharField(max_length=200)
user_token = models.CharField(max_length=200)
patient_id = models.CharField(max_length=12, unique=True)
user_preferences = models.CharField(max_length=200)
class Meta:
managed = False
db_table = 'walnut_users'
def __str__(self):
return self.user_id
解决方案
将您的帖子更改为以下内容:
def post(self, request):
serializer_class_post=UserDetailsSerializer(data=request.data)
if serializer_class_post.is_valid():
try:
obj = serializer_class_post.save()
return Response([{"info": {
"status": "SUCCESS",
"message": "User Details Successfully Uploaded"
},
"user_id": obj.pk
}], status=status.HTTP_201_CREATED)
except IntegrityError as e:
return Response([{"info": {
"status": "Error",
"message": "Error Uploading User Details"
}
}], status=status.HTTP_400_BAD_REQUEST)
return Response(serializer_class_post.errors, status=status.HTTP_400_BAD_REQUEST)`
serializer.save()
返回新创建的对象;只需使用它并在您的回复中获取 pk 。
此外,API 最佳实践是返回完整的对象表示;不仅仅是身份证。理想情况下,我会做您所做的事情:{"data": serializer_post_data.data}
-> 这将返回完整的嵌套表示。您应该仍然可以访问user_id
as data.user_id
。但是,如果您确定自己的用例,上面的代码将起作用。
由于user_id
是一个 IntegerField 和主键,因此 Django 期望您提供该字段的值。您在哪里为 user_id 分配值 - 您的 API 是否也发布了 user_id 的值。如果要自动分配值,请将其更改为user_id = models.AutoField(primary_key=True)
推荐阅读
- swiftui - Xcode 11.3 / iOS 13.3 NavigationLink 仅推送一次
- python - 为什么在python中更新字典时
- python - nginx:[警告] 0.0.0.0:80 上的服务器名称“域”冲突,忽略
- javascript - 响应式数据表导致奇怪的选择框错误
- c# - 在 C# 中用构造函数赋值和用属性赋值有什么区别?
- python - Jython - 无法安装“ensurepip”
- pandas - 我们如何使用 XLSXWriter 中的 conditional_format() 函数根据多个条件突出显示单个单元格?
- android - 三星 Galaxy S8+ 的触觉(振动)反馈
- go-templates - 用 Go 模板语言在列表中查找对象
- python - python如何确定合适的元类?