json - 如何从 django 模型正确获取数据到 Django REST 框架
问题描述
我正在使用 Python 3.9 和 Django 3.1.6。我在 models.py 中有一个很长的模型。短版是这样的:
class Check (models.Model):
@property
def total_body_fat_percentage(self):
if self.client_gender == "M":
total_body_fat_percentage = (self.Yuhasz * 0.097) + 3.64
pass
else:
total_body_fat_percentage = total_body_fat_percentage = float((self.Yuhasz * 0.1429) + 4.56)
return total_body_fat_percentage
@property
def muscle_weight_percentage(self):
muscle_weight_percentage =self.muscle_weight*100/self.weight
return muscle_weight_percentage
这些字段返回一个浮点数。像 14.407 这样的东西。
当然还有其他字段,例如 Yuhasz、client_gender 等。我需要将这些值转换为 JSON。我尝试在 serializer.py 上使用以下序列化程序:
class PercentagesSerializer(ModelSerializer):
class Meta:
model = Check
fields = ('total_body_fat_percentage', 'muscle_weight_percentage')
我在views.py上有以下课程:
class PercentagesAPI(APIView):
authentication_classes = []
permission_classes = []
serializer = PercentagesSerializer
def get(self, request, format=None):
lista = Check.objects.all()
print(lista)
response = self.serializer(lista)
print(response)
json_response= json.dumps(response.data)
print(json_response)
data = {
'percentages': json_response
}
return Response(response.data)
但它不返回任何数据。Shell 控制台声明它获取查询集,获取字段,但似乎没有获取值:
<QuerySet [<Check: Check object (1)>]>
PercentagesSerializer(<QuerySet [<Check: Check object (1)>]>):
total_body_fat_percentage = ReadOnlyField()
muscle_weight_percentage = ReadOnlyField()
{}
提前感谢您的建议和帮助!
解决方案
您填充data
变量但从不使用它。相反,您返回response.data
response = self.serializer(lista)
data = {
'percentages': json_response
}
return Response(response.data)
我认为这是解决方案:
response = self.serializer(lista, many=True) # <-- many
data = {
'percentages': json_response
}
return Response(data) # <-- data
查询确实返回了一些东西 - 打印显示 1 条记录/对象:Check object (1)
推荐阅读
- scala - 无法重写递归调用:它不在尾部位置
- django - 部署到 Google App Engine / Cloud SDK 的 Django 应用上的静态文件位置
- windows - 限制从 net start 命令运行的 Windows 服务使用的 CPU 内核数
- javascript - 如果数组中的列与 javascript 中存在的完全相等,则求和列
- sql - SQL 中的日期过滤
- c# - 类别分组
- java - 不断得到 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
- google-cloud-platform - 使用云函数与云作为对话流的 webhook 运行
- python - 装饰函数执行后从装饰器访问变量值
- python - 使用索引号删除 pandas 中的特定行