Django REST Framework:Serializerで取得結果を1つのリストにする
Django REST Frameworkでマスタからデータを取得するAPIを作成しています。
models.py
class CommonMaster(models.Model):
type = models.CharField(max_length=20)
type_id = models.IntegerField()
key_name = models.CharField(max_length=20)
value = models.CharField(max_length=1024,null=True)
レコード:
{"id":"1", "type":"cat", "type_id":"1", "key_name":"Breed", "value":"Somali"}
{"id":"2", "type":"cat", "type_id":"1", "key_name":"Country", "value":"Canada"}
{"id":"3", "type":"cat", "type_id":"2", "key_name":"Breed", "value":"Bengal"}
{"id":"4", "type":"cat", "type_id":"2", "key_name":"Country", "value":"America"}
{"id":"5", "type":"dog", "type_id":"1", "key_name":"Breed", "value":"Shiba"}
{"id":"6", "type":"dog", "type_id":"1", "key_name":"Country", "value":"Japan"}
views.py
class CommonMasterViewSet(viewsets.ReadOnlyModelViewSet):
serualizer_class = ListSerializer
def get_queryset(self):
return CommonMaster.objects.all()\
.filter(type=self.request.query_params['type'])\
.filter(key_name=self.request.query_params['type_id'])
serializer.py
class ListSerializer(serializers.Serializer):
def to_representation(self, obj):
return {
obj.key_name : obj.value
}
現在、取得結果は
[
{
"Breed": "Bengal"
},
{
"Country": "America"
}
]
のようになるのですが、以下のような形式でJSONを返したいと考えています。
[
{
"Breed": "Bengal",
"Country": "America"
},
]
Serializerの修正のみで実現可能でしょうか。
解決法がありましたらご教授いただけないでしょうか。よろしくお願いします。