django - 我已经在元类的字段中通过了 __all__ ,但我仍然只返回一个字段。建议一个更好的方法来解决它我想要那里的所有领域
问题描述
我已经包含了序列化程序和views.py,我是新手,所以我可能在这里犯了一个非常愚蠢的错误,我无法弄清楚,请查看此代码并让我了解如何解决这个问题。
序列化程序.py
class ServiceSerializer(serializers.RelatedField):
def to_representation(self, value):
return value.name
class Meta:
model = Service
fields = ('name')
class SaloonSerializer(serializers.Serializer):
services = ServiceSerializer(read_only = True, many=True)
class Meta:
model = Saloon
fields = (
'name', 'services'
)
在 SaloonSerializers 领域中,我尝试了多种方法,例如仅名称字段,但如果只得到一个输出,我在本文末尾附上了。
视图.py
@api_view(['GET'])
def saloon_list(request):
if request.method=="GET":
saloons = Saloon.objects.all()
serializer = SaloonSerializer(saloons, many=True)
return Response(serializer.data)
模型.py
class Service(models.Model):
name = models.CharField(max_length=200, blank=False)
price = models.IntegerField(blank=False)
time = models.IntegerField(blank=False)
def __str__(self):
return self.name
class Saloon(models.Model):
name = models.CharField(max_length = 200, blank=False)
services = models.ManyToManyField(Service)
def __str__(self):
return self.name
输出:
[
{
"services": [
"Cutting",
"Shaving",
"Eye Brow",
"Waxing",
"Facial massage"
]
},
{
"services": [
"Cutting",
"Shaving",
"Facial massage"
]
}
]
解决方案
您需要使用 a ModelSerializer
: 一个简单的序列化程序不关心 a Meta
,并且只会序列化您自己指定序列化程序字段的项目。
因此,您应该将其重写为:
# ModelSerializer ↓
class SaloonSerializer(serializers.ModelSerializer):
services = ServiceSerializer(read_only = True, many=True)
class Meta:
model = Saloon
fields = (
'name', 'services'
)
推荐阅读
- c++ - 我可以在应用程序的 atexit 处理程序中使用导入的 DLL 函数吗?
- reactjs - 对 Material UI 做出反应,找不到自定义字体
- android - Giphy android sdk 没有返回发布版本的数据
- android - 为什么 Android Studio 一次又一次地显示 ERROR: Failed to open zip file。即使我正在创建一个新项目?
- c# - 检测 Visual Studio 是否正在运行
- reactjs - 如何在 ReactJs 中正确使用 shouldComponentUpdate() 和 componentWIllUpdate() 方法?
- java - Eclipse Oxygen 中的 Maven 问题
- corda - 解析量
在 Corda 外壳中 - c++ - Qt - 制作一个与 QGraphicsView 重叠的面板
- java - 如何将对象注入以编程方式创建的球衣资源