繁体   English   中英

Django - 如何将json反序列化为嵌套对象

[英]Django - How to deserialize json into a nested object

我有以下问题。 我需要使用json中的POST数据创建一个复杂的对象。 在models.py文件中,我有一个名为“Company”的主对象:

class Company(models.Model):
    name = models.CharField(max_length=255)
    descr = models.CharField(max_length=255)

    def __str__(self):
        return self.name

然后我有“建筑”:

class Building(models.Model):
    name = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    location = models.TextField()
    company= models.ForeignKey("Company", related_name="buildings", on_delete=models.CASCADE)

等等其他几个类(即“Floor”,“Area”,“Room”)。

我从POST请求得到的json是:

    {
    "id": 1,
    "buildings": [{
        "id": 3,
        "floors": [{
            "id": 1,
            "floor": -1,
            "descr": "underground",
            "building": 3
        }],
        "areas": [{
            "id": 1,
            "rooms": [{
                "id": 1,
                "floor": 1,
                "area": 1,
                "descr": "First Room"
            }],
            "descr": "Dev area",
            "building": {
                "id": 3,
                "name": "Sede",
                "city": "Rome",
                "location": "mylocation",
                "company": {
                    "id": 1,
                    "name": "Test",
                    "descr": "Test"
                }
            }
        }],
        "name": "Sede",
        "city": "Rome",
        "location": "mylocation",
        "company": 1
    }],
    "name": "Test",
    "descr": "Test"
}

当我尝试从json创建一个“Company”对象时,它只创建以下内容:

{
    "id": 1,
    "buildings": [],
    "name": "Test",
    "descr": "Test"
}

而不是完整的结构。

我的序列化器如下:

class BuildingSerializer(serializers.ModelSerializer):
    floors= FloorSerializer(read_only=True, many=True)
    areas = AreaSerializer(read_only=True, many=True)
    class Meta:
        model = Building
        fields = '__all__'
        read_only_fields = ('id',)

class CompanySerializer(serializers.ModelSerializer):
    buildings= BuildingSerializer(read_only=True, many=True)
    class Meta:
        model = Company
        fields = '__all__'
        read_only_fields = ('id',)

我该如何解决这个问题?

PS我知道json有点多余!

没有获得嵌套数据的99%的时间是因为您正在发送具有表单内容类型的JSON有效内容。

通过将Content-Type标头设置为application/json来明确您的客户端发送JSON,这应该可以解决内容问题。

您将建筑物指定为只读字段: http//www.django-rest-framework.org/api-guide/serializers/#specifying-read-only-fields

尝试在序列化程序中删除该参数:

class BuildingSerializer(serializers.ModelSerializer):
    floors= FloorSerializer(many=True)
    aree = AreaSerializer(many=True)
    class Meta:
        model = Building
        fields = '__all__'
        read_only_fields = ('id',)

class CompanySerializer(serializers.ModelSerializer):
    buildings= BuildingSerializer(many=True)
    class Meta:
        model = Company
        fields = '__all__'
        read_only_fields = ('id',)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM