首页 > 解决方案 > 我已经在元类的字段中通过了 __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"
        ]
    }
]

标签: djangodjango-rest-framework

解决方案


您需要使用 a ModelSerializer: 一个简单的序列化程序不关心 a Meta,并且只会序列化您自己指定序列化程序字段的项目。

因此,您应该将其重写为:

#                    ModelSerializer ↓
class SaloonSerializer(serializers.ModelSerializer):
    services = ServiceSerializer(read_only = True, many=True)

    class Meta:
        model = Saloon
        fields = (
            'name', 'services'
        )

推荐阅读