Как получить несколько данных из вызовов API в React js?

Я использовал django в качестве бэкенда и react в качестве фронтенда. Я могу вызвать api и показать детали товара, но в моем сериализаторе есть и сопутствующие товары. Я отправляю ответ связанного товара из моего сериализатора. Я хочу показать сопутствующий товар после раздела с подробной информацией о товаре. Как я могу вызвать объект?

#это мой сериализатор

class ProductWithRelatedSerializer(ProductSerializer):
    related = serializers.SerializerMethodField(read_only=True)
    
    class Meta:
        model = Product
        fields = '__all__'

    def get_related(self, obj):
        related = Product.objects.filter(
            category_id=obj.category_id
            ).exclude(_id=obj.pk).order_by('?').select_related('user')[:4]
        ps = ProductSerializer(related, many=True)
        return ps.data

это мой взгляд на продукт

@api_view(['GET'])
def getProduct(request, pk):
    product = Product.objects.get(_id=pk)
    serializer = ProductWithRelatedSerializer(product, many=False)
    return Response(serializer.data)

в моем фронтенд-редукторе

export const productDetailsReducer = (state = { product: {}}, action) => {
    switch (action.type) {
        case PRODUCT_DETAILS_REQUEST:
            return { loading: true, ...state }
        
        case PRODUCT_DETAILS_SUCCESS:
            return { loading: false, product: action.payload }

        case PRODUCT_DETAILS_FAIL:
            return { loading: false, error: action.payload }


        default:
            return state

    }
}

это мое действие

export const listProductDetails = (id) => async (dispatch) => {
    try {
        dispatch({ type: PRODUCT_DETAILS_REQUEST })

        const { data } = await axios.get(`/api/products/${id}`)

        dispatch({
            type: PRODUCT_DETAILS_SUCCESS,
            payload: data
        })
    }catch(error){
        dispatch({
            type: PRODUCT_DETAILS_FAIL,
            payload: error.response && error.response.data.detail
            ? error.response.data.detail
            : error.message,
        })
    }
}

это мой экран для подробной информации о продукте

Как в последней строке я вызываю product.description и получаю описание, но для связанного товара как я должен вызвать?

Я уже отвечал на что-то подобное в этой теме thread. Я рекомендую использовать паттерн репозитория, чтобы лучше организовать ваш асинхронный поток с диспетчеризированными состояниями, особенно когда вам нужно несколько вызовов API.

Вернуться на верх