2015-04-02 24 views
1

我有兩個模型(地圖和地點),我想創建一個JSON與這兩個(一個地圖包含幾個地方)。Django REST - 如何獲得兩種模型的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" 
        } 
       ] 
      } 


     ] 
    } 
} 

在此先感謝您的幫助。

回答

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) 
+0

太感謝你了,它的工作原理完美... – 2015-04-02 16:02:15

+0

考慮接受答案,如果它是固定的,以便其他人可以很容易地看到它。很高興工作! =)。 – argaen 2015-04-02 17:48:27

+0

完成:)抱歉,我是新的在stackoverflow! – 2015-04-03 08:11:44