django-rest-framework - 如何显示与其他模型相关的模型的详细信息?
问题描述
例如,当 URL 时,我需要 localhost:8000/apirest/customers
客户是分配了表角色的表,我需要显示角色的所有字段
class Customer(models.Model):
Id = models.AutoField(primary_key=True)
Name = models.CharField(max_length=60)
Address = models.CharField(max_length=60)
Phone = models.CharField(max_length=60)
Role = models.ForeignKey(Role, on_delete=models.CASCADE)
class Role(models.Model):
Id = models.AutoField(primary_key=True)
Description = models.CharField(max_length=60)
Premium = models.BooleanField()
这只是一个例子,我需要 Json 显示这样的东西
{
"Id":1,
"Name":"Jhon Carter",
"Adress": "Lombard Street"
"Phone": "25 56592552",
"Role":{
"Id":1,
"Description":"Description 1"
"Premium": true
}
}
解决方案
欢迎来到 SO Jorge。
首先你的模型编译成功了吗?因为在这一行:
Role = models.ForeignKey(Role, on_delete=models.CASCADE)
我明白Undefined Role
这是因为角色定义在下一行。所以我将模型定义更改为:
class Customer(models.Model):
class MyRole(models.Model):
Id = models.AutoField(primary_key=True)
Description = models.CharField(max_length=60)
Premium = models.BooleanField()
Id = models.AutoField(primary_key=True)
Name = models.CharField(max_length=60)
Address = models.CharField(max_length=60)
Phone = models.CharField(max_length=60)
Role = models.ForeignKey(MyRole, on_delete=models.CASCADE)
您想要做的是序列化关系,对于您的情况,这将是这样的:
from rest_framework import serializers
from core.models import Customer
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Customer.MyRole
fields = ['Id', 'Description', 'Premium']
class CustomerSerializer(serializers.ModelSerializer):
Role = RoleSerializer(many=False, read_only=True)
class Meta:
model = Customer
fields = ['Id', 'Name', 'Address', 'Phone', 'Role']
推荐阅读
- pandas - 我想使用循环在列中随机添加 a 到 z。我该怎么做?
- r - approx(nintv, cvals[nintl:ninth, tintl, i], n = max(nintv) - 中的错误:需要至少两个非 NA 值进行插值
- python - 如何使用 pd.eval() 对 pandas 数据框中的行进行索引?
- javascript - 使用反应打开一个新页面
- reactjs - 定义图像时状态为空
- ios - 如何在 UIImagePickerController 中自定义修剪器?
- flutter - Flutter Sql FutureBuilder 快照 null
- mongodb - 我已经在本地安装了 mongodb,如何使其数据与 mongodb 服务器或集群同步?
- webrtc - 从浏览器捕获相机和麦克风并将其流式传输到 RTMP 服务器的最佳方法是什么?
- javascript - express.js 下一个函数有时会导致问题