【问题标题】:Django REST - How can I get a JSON with two models?Django REST - 如何获得具有两个模型的 JSON?
【发布时间】:2015-06-07 15:40:59
【问题描述】:

我有两个模型(地图和地点),我想用这两个模型创建一个 JSON(地图包含多个地点)。

models.py

class Map(models.Model):
   name = models.CharField(max_length=100)
   slug = models.SlugField(max_length=200)

class Place(models.Model):
   map = models.ForeignKey('main.Map')
   name = models.CharField(max_length=100)
   slug = models.SlugField(max_length=200)

我用它来单独序列化这些模型:

serializers.py

class MapSerializer(serializers.ModelSerializer):
    class Meta:
        model = Map
        fields = ('id', 'name')

class PlaceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Place
        fields = ('id', 'name', 'map')

我想要这样的 JSON,但我不知道如何正确序列化它...

{
    "maplist": {
        "maps": [
            {
                "id": "1",
                "name": "dust2",
                "places": [
                    {
                        "id": "1",
                        "name": "Long"
                    },
                    {
                        "id": "2",
                        "name": "Middle"
                    }
                ]
            },
            {
                "id": "2",
                "name": "inferno",
                "places": [
                    {
                        "id": "1",
                        "name": "Middle"
                    },
                    {
                        "id": "2",
                        "name": "ASite"
                    }
                ]
            }


        ]
    }
}

提前感谢您的帮助。

【问题讨论】:

    标签: python json django rest serialization


    【解决方案1】:

    尝试使用嵌套序列化器:

    class PlaceSerializer(serializers.ModelSerializer):
        class Meta:
            model = Place
            fields = ('id', 'name')
    
    class MapSerializer(serializers.ModelSerializer):
        places = PlaceSerializer(many=True)
        class Meta:
            model = Map
            fields = ('id', 'name')
    

    要完成这项工作,您需要更改模型以包含与外键相关的名称:

    class Place(models.Model):
       map = models.ForeignKey('main.Map', related_name="places")
       name = models.CharField(max_length=100)
       slug = models.SlugField(max_length=200)
    

    【讨论】:

    • 如果它已修复,请考虑接受答案,以便其他人可以轻松看到它。很高兴它奏效了! =)。
    • 完成 :) 抱歉,我是 stackoverflow 的新手!
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多