通过留在另一个序列化程序中序列化列表

时间:2019-04-24 12:27:35

标签: python django serialization django-rest-framework

这是我的输出,看起来应该像

{
    "status": 1,
    "errors": "",
    "results": [
        {
            "car_type": "sedan",
            "is_active": true,
            "company": {
                ["tata","hyundai"]
            }
        }
    ]
}

我的模型是

class CarType(CommonBase):
    car_type = models.TextField(null=True, blank=True)
    is_active = models.BooleanField(default=True)
    company = models.ManyToManyField('Company', null=True,
                                      blank=True)


class Company(CommonBase):
    company_name = models.TextField(null=True, blank=True)
    country = models.TextField(null=True, blank=True)

我应该如何为我的get API编写序列化程序,以使用is_active = True返回所有汽车类型

1 个答案:

答案 0 :(得分:1)

那个

{
     "company": {[...]}
}

公司序列化中的词典内容没有意义,而是您想要的是实际列表。

仅关注results中的项目序列化,您可以使用类似以下的序列化器:

class CarTypeSerializer(serializers.ModelSerializer):
    company = serializers.SerializerMethodField()

    def get_company(self, obj):
        return [company.company_name for company in obj.company.all()]

    class Meta:
        model = CarType
        fields = ("car_type", "is_active", "company")

这将产生如下输出:

{
    "car_type": "Car type..",
    "is_active": true,
    "company": [
        "company 1",
        "company 2"
    ]
}