У меня есть API, который возвращает material_id, material_name и его store_id (внешний ключ) и store_name, а также имеет поисковый бэкэнд. Поэтому я хочу вернуть все material_name и material_id для одного ключевого материала и аналогичным образом все поля магазина в хранилище ключей.
Итак, я попробовал код ниже
class MaterialSuggestions(generics.ListAPIView):
search_fields = ['name', 'shape', 'color', 'material_type',
'surface_type', 'store__name']
filter_backends = (filters.SearchFilter,)
queryset = Material.objects.all()
serializer_class = MaterialSuggestionsSerializer
class MaterialSuggestionsSerializer(serializers.ModelSerializer):
class Meta:
model = Material
fields = ('material','store')
material = serializers.SerializerMethodField('get_material')
store = serializers.SerializerMethodField('get_store')
def get_material(self,obj):
return {'material_id':obj.id,'material_name':obj.name}
def get_store(self,obj):
return {'store_id':obj.store.id,'store_name':obj.store.name}
, когда япозвоните в API, я получу что-то вроде этого:
{
"material": {
"material_id": 14,
"material_name": "test"
},
"store": {
"store_id": 28,
"store_name": "test1"
}
},
{
"material": {
"material_id": 13,
"material_name": "test3"
},
"store": {
"store_id": 29,
"store_name": "test2"
}
}
]
Это то, что я в идеале хотел бы вернуть.
{
"material": [ {
"material_id": 14,
"material_name": "test"
},
{
"material_id": 13,
"material_name": "test3"
}
]
"store": [ {
"store_id": 28,
"store_name": "test1"
},
{
"store_id": 29,
"store_name": "test2"
}
]
}
или даже это было бы здорово
{
"material": {
"material_id": 14,13
"material_name": "test","test3"
},
"store": {
"store_id": 28,29
"store_name": "test1","test2"
},
}
Как бы мы манипулировали данными, которые мы возвращаем, с помощью сериализатора и как мы можем получить доступ к набору запросов, поступающему в сериализатор?