2016-08-30 78 views
0

我有一個Django模型是這樣的:更改Django Rest框架序列化程序的輸出結構?

class Sections(models.Model): 
    section_id = models.CharField(max_length=127, null=True, blank=True) 
    title = models.CharField(max_length=255) 
    description = models.TextField(null=True, blank=True) 

class Risk(models.Model): 
    title = models.CharField(max_length=256, null=False, blank=False) 
    section = models.ForeignKey(Sections, related_name='risks') 

class Actions(models.Model): 
    title = models.CharField(max_length=256, null=False, blank=False) 
    section = models.ForeignKey(Sections, related_name='actions') 

而串行這樣的:

class RiskSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Risk 
     fields = ('id', 'title',) 

class ActionsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Actions 
     fields = ('id', 'title',) 

class RiskActionPerSectionsSerializer(serializers.ModelSerializer): 
    risks = RiskSerializer(many=True, read_only=True) 
    actions = ActionsSerializer(many=True, read_only=True) 

    class Meta: 
     model = Sections 
     fields = ('section_id', 'risks', 'actions') 
     depth = 1 

    def to_representation(self, instance): 
     response_dict = dict() 
     response_dict[instance.section_id] = { 
     'actions': HealthCoachingActionsSerializer(instance.actions.all(), many=True).data, 
     'risks': HealthCoachingRiskSerializer(instance.risks.all(), many=True).data 
    } 
    return response_dict 

當通過視圖訪問RiskActionPerSectionSerializer,我得到下面的輸出:

[ 
{ 
    "section 1": { 
     "risks": [], 
     "actions": [] 
    } 
}, 
{ 
    "section 2": { 
     "risks": [], 
     "actions": [] 
    } 
}, 
..... 
] 

這很好,但我寧願有:

[ 

    "section 1": { 
     "risks": [], 
     "actions": [] 
    }, 
    "section 2": { 
     "risks": [], 
     "actions": [] 
    } 
..... 
] 

而且爲什麼它返回默認[],而不是一個對象數組比如像:

{ 
"count": 0, 
"next": null, 
"previous": null, 
"results": [] 
} 

回答

0

不能存儲在列表鍵/值對, ['key': {}]將不起作用,您應該通過索引訪問項目,而不是像在您的表示中那樣。
數組返回,因爲many=True這意味着你在序列化程序中放置了許多對象,並且它等待着你的序列。

相關問題